G. В эфире рубрика «Эксперименты»

Лаборанты проводят эксперимент и запросили разработку системы обработки данных. Результатами эксперимента должны стать пары рациональных чисел.

Для работы им требуются функции:

  • enter_results(first, second, ...) — добавление данных одного или нескольких результатов (гарантируется, что количество параметров будет чётным);
  • get_sum() — возвращает пару сумм результатов экспериментов;
  • get_average() — возвращает пару средних арифметических значений результатов экспериментов.

Все вычисления производятся с точностью до сотых.

Примечание

В решении не должно быть вызовов требуемых функций.

Пример

Ввод

enter_results(1, 2, 3, 4, 5, 6)
print(get_sum(), get_average())
enter_results(1, 2)
print(get_sum(), get_average())

Вывод

(9, 12) (3.0, 4.0)
(10, 14) (2.5, 3.5)

Ввод

enter_results(3.5, 2.14, 45.2, 37.99)
print(get_sum(), get_average())
enter_results(5.2, 7.3)
print(get_sum(), get_average())
enter_results(1.23, 4.56, 3.14, 2.71, 0, 0)
print(get_sum(), get_average())

Вывод

(48.7, 40.13) (24.35, 20.07)
(53.9, 47.43) (17.97, 15.81)
(58.27, 54.7) (9.71, 9.12)

Решение

Достаточно простая задача. Придется вспомнить как расширять список несколькими значениями, и решить для себя будете вы пересчитывать сумму четных и нечетных элементов каждый раз или сделаете один раз при добавлении новых элементов.

Первый вариант решения – добавление чисел в список и пересчет суммы и среднего каждый раз, когда приходит запрос.

Второй вариант решения – накопление суммы по мере накопления чисел, расчет среднего по запросу.

В комментариях упоминается еще один способ решения, но он более сложный и трудозатратный – его реализация интересна только с точки зрения вопроса как всегда иметь вычисленное среднее значение без фактического накопления суммы чисел.

Посмотреть код

Решение

Python
data = []
odds = []
evens = []


def enter_results(*numbers):
    global data, odds, evens
    data.extend(list(numbers))
    odds = data[::2]
    evens = data[1::2]


def get_sum():
    return round(sum(odds), 2), round(sum(evens), 2)


def get_average():
    return round(sum(odds) / len(odds), 2), round(sum(evens) / len(evens), 2)

Решение

Python
is_even = True
odds_counter = 0
evens_counter = 0
odds_sum = 0
evens_sum = 0


def enter_results(*numbers):
    global is_even, odds_counter, evens_counter, odds_sum, evens_sum
    for number in numbers:
        if is_even:
            evens_counter += 1
            evens_sum += number
        else:
            odds_counter += 1
            odds_sum += number
        is_even = not is_even


def get_sum():
    return round(evens_sum, 2), round(odds_sum, 2)


def get_average():
    return round(evens_sum / evens_counter, 2), round(odds_sum / odds_counter, 2)
Подписаться
Уведомить о
guest
10 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии