-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaggregate_stats.py
More file actions
85 lines (71 loc) · 3.35 KB
/
aggregate_stats.py
File metadata and controls
85 lines (71 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# aggregate_stats.py
import sys
def aggregate_stats(*nums, round_digits: int = 2) -> dict:
"""
Принимает любое количество чисел и возвращает словарь:
{
"min": минимальное,
"max": максимальное,
"sum": сумма,
"avg": среднее
}
Значения округляются до round_digits знаков.
"""
# 1) Проверяем, что есть хотя бы одно число
if len(nums) == 0:
raise ValueError("Нужно хотя бы одно число")
# 2) Инициализируем счётчики
# Для min и max используем первый элемент как стартовую точку
min_val = nums[0]
max_val = nums[0]
total = 0
# 3) Проходим по всем числам
for n in nums:
# считаем сумму
total += n
# обновляем минимум
if n < min_val:
min_val = n
# обновляем максимум
if n > max_val:
max_val = n
# 4) Вычисляем среднее
avg_val = total / len(nums)
# 5) Округляем все результаты
result = {
"min": round(min_val, round_digits),
"max": round(max_val, round_digits),
"sum": round(total, round_digits),
"avg": round(avg_val, round_digits)
}
return result
def main():
# 1) Читаем строку и разбиваем на части
line = input("Введите числа через пробел: ").strip()
if not line:
print("Нужно хотя бы одно число")
sys.exit()
# 2) Преобразуем каждый фрагмент в float
parts = line.split()
try:
numbers = [float(x) for x in parts]
except ValueError:
print("Ошибка: все введённые значения должны быть числами.")
sys.exit()
# 3) Вызываем функцию и выводим результаты
try:
stats = aggregate_stats(*numbers, round_digits=4)
except ValueError as e:
print(e)
sys.exit()
print(f"Результаты: {{'min': {stats['min']}, 'max': {stats['max']}, 'sum': {stats['sum']}, 'avg': {stats['avg']}}}")
if __name__ == "__main__":
main()
# Объяснение ключевых моментов:
# 1. split(): разбивает строку по пробелам, возвращает список строк.
# 2. list comprehension: [float(x) for x in parts] создаёт список чисел.
# 3. len(nums): длина кортежа nums. Используется для проверки и деления при avg.
# 4. Инициализация min_val и max_val значением первого элемента позволяет корректно сравнивать.
# 5. Цикл for пробегает по всем числам, обновляет сумму, минимум и максимум.
# 6. return result: функция отдаёт словарь, а не печатает сразу — так она остаётся чистой.
# 7. В main() обрабатываем ошибки, печатаем готовый словарь в требуемом формате.