A. A+B+…

Наконец-то мы можем обрабатывать данные, не имея ни малейшего понятия об их количестве.

Напишите программу, которая находит сумму всех чисел введённых пользователем.

Формат ввода

Вводятся строки чисел.

Формат вывода

Одно число — сумма всех чисел в потоке ввода.

Пример

Ввод

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().

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

Решение

Python
# stdin.readlines()

from sys import stdin

summa = 0
for line in stdin.readlines():
    for item in line.split():
        summa += int(item)

print(summa)

Решение

Python
# stdin.read()

from sys import stdin

summa = 0
for item in stdin.read().split():
    summa += int(item)

print(summa)

Решение

Python
from sys import stdin

summa = sum([int(num) for num in stdin.read().split()])

print(summa)
Подписаться
Уведомить о
guest
3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии