Сложение четных чисел, пока не появится пустая строка

На вход с клавиатуры подаются числа (по одному). Нужно вывести на экран сумму всех четных чисел. Ввод прекращается, если введена пустая строка (""). При любой ситауации, когда не попадаются четные числа, вывести на экран нужно 0 (например, числа не были введены вообще или были введены только нечетные числа).

summ = 0

while 1:
    a = int(input())
    if a == ('') : break;
    for i in range(a):
        if  i % 2 == 0:
            summ += i    
print(summ)

ValueError: invalid literal for int() with base 10: ''

Как сделать так, что бы ввод заканчивался на пустой строке. Выдает ошибку что пустая строка, это не целое число. Как их связать?


Ответы (4 шт):

Автор решения: Sergey Gornostaev

Проблема в том, что вы сначала делаете приведение ввода к числу, а потом проверяете, что было введено. Естественно, пустую строку в число преобразовать нельзя и возникает ошибка. Стоит перенести приведение ввода к числу в другое место:

summ = 0

while True:
    a = input()
    if not a:
        break
    for i in range(int(a)):
        if  i % 2 == 0:
            summ += i

print(summ)

Либо сделать ещё проще:

result = sum(filter(lambda x: not x % 2, map(int, iter(input, ''))))
print(result)
→ Ссылка
Автор решения: М. Абдул

Как вариант

summ = 0
a = 0
while a != "":
    if int(a) % 2 == 0:
        summ += int(a)
    a = input()
print(summ)
→ Ссылка
Автор решения: wobble
result = sum(x for x in map(int, iter(input, '')) if not x % 2)
print(result)
→ Ссылка
Автор решения: Stanislav Volodarskiy

Хорошее применение для моржового оператора:

s = 0
while w := input():
    a = int(w)
    if a % 2 == 0:
        s += a    
print(s)
→ Ссылка