Наконец-то мы можем обрабатывать данные, не имея ни малейшего понятия об их количестве.
Напишите программу, которая находит сумму всех чисел введённых пользователем.
Формат ввода
Вводятся строки чисел.
Формат вывода
Одно число — сумма всех чисел в потоке ввода.
Пример
Ввод
1 2
3 4 5
6
7 8 9 10
Вывод
55
Решение
Простая задача на освоение взаимодействия с stdin. Одна из проблем с которыми сталкиваются ученики – как завершить ввод данных (control + D для maс, ctrl + D для linux и ctrl + Z для windows).
На примере этой задачи рассмотрим процесс рефакторинга кода – постепенного улучшения с целью повышения его простоты и эффективности.
Изначально решим задачу наивным способом с помощью метода readlines(). Этот метод считывает строки одну за одной, дальше мы просто разбиваем каждую строку на элементы c помощью split() и преобразуем их в целое число, накапливая сумму чисел в переменной. По окончании цикла чтения строк просто выводим полученную сумму.
Если подумать и вспомнить, что split() разбивает строки не только по пробелам, но и по табуляциям (‘\t’) и переводам строк (‘\n’), то логичным шагом будет отказ от метода readlines() в пользу чтения всего ввода целиком (метод read()). В остальном алгоритм останется прежним.
Тепрь, если посмотреть на код внимательно, то окажется, что всю работу по преобразованию чисел в целое число можно получить списочному выражению, а сумму накапливать с помощью функции sum().
Посмотреть код
Решение
# stdin.readlines()
from sys import stdin
summa = 0
for line in stdin.readlines():
for item in line.split():
summa += int(item)
print(summa)
Решение
# stdin.read()
from sys import stdin
summa = 0
for item in stdin.read().split():
summa += int(item)
print(summa)
Решение
from sys import stdin
summa = sum([int(num) for num in stdin.read().split()])
print(summa)