Лаборанты проводят эксперимент и запросили разработку системы обработки данных. Результатами эксперимента должны стать пары рациональных чисел.
Для работы им требуются функции:
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)
Решение
Достаточно простая задача. Придется вспомнить как расширять список несколькими значениями, и решить для себя будете вы пересчитывать сумму четных и нечетных элементов каждый раз или сделаете один раз при добавлении новых элементов.
Первый вариант решения – добавление чисел в список и пересчет суммы и среднего каждый раз, когда приходит запрос.
Второй вариант решения – накопление суммы по мере накопления чисел, расчет среднего по запросу.
В комментариях упоминается еще один способ решения, но он более сложный и трудозатратный – его реализация интересна только с точки зрения вопроса как всегда иметь вычисленное среднее значение без фактического накопления суммы чисел.
Посмотреть код
Решение
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)
Решение
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)