#python
#python
Вопрос:
Я пытаюсь написать скрипт на python: я набираю числа, и когда я набираю = , он суммирует все предыдущие числа. Я пробовал это, но это не работает:
a= int(input())
while a != '=':
szum = a
if a == '=':
break
print(szum)
Я хочу решить это с помощью функции while / if /else, если это возможно.
Комментарии:
1. Вы никогда не получаете новый ввод или не изменяете
a
его, поэтому он никогда не будет равен=
. Кроме того, вы всегда должны объяснять, что означает «не работает».2. Добавить
input
внутриwhile
блока.
Ответ №1:
Преобразующий код Раймонда Хеттингера в красивый идиоматический Python имеет элегантное решение этой проблемы; форма с двумя аргументами iter()
:
# NOTE: Missing parens is intentional! iter's two-argument form takes
# a callable that can be invoked with no args (`input` -> `input()`),
# and the sentinel value to stop at.
#
# It yields consecutive return values from `input()` until '=' is found.
total = 0
for i in iter(input, '='):
total = int(i)
print(total)
Или еще более красивый:
print(sum(int(i) for i in iter(input, '='))
Ответ №2:
Это должно сделать это:
a = input()
zsum = 0
while a!='=':
zsum = int(a)
a=input()
print(zsum)
Примите во внимание, что вы не проверяете неправильные входные данные, поэтому написание буквы, отличной от ‘=’, приведет к исключению. Чтобы решить эту проблему, вы можете управлять этими исключениями с try-except
помощью такого блока:
a = input()
zsum = 0
while a!='=':
try:
zsum = int(a)
except:
print('input not valid')
finally:
a=input()
print(zsum)
РЕДАКТИРОВАТЬ: как указано Брайаном Родригесом в комментариях. Это решение может привести к плохой информации об ошибке. Вы могли бы решить эту проблему и продолжить работу программы, показав ошибку исключения следующим образом:
a = input()
zsum = 0
while a!='=':
try:
zsum = int(a)
except Exception as e:
print(e)
finally:
a=input()
print(zsum)
Комментарии:
1.
int
выдает очень информативную ошибку, когда ввод неверен, но вы заменяете ее менее информативной. Было бы лучше позволитьint
выполнять свою работу;ValueError: invalid literal for int() with base 10: 'abc'
против вашегоinput not valid
.2. Да, но отсутствие контроля над исключением приведет к остановке выполнения, и конечный пользователь (которому не обязательно знать, что означает ValueError ) будет сбит с толку. Управляя им, вы сообщаете пользователю, что его ввод неверен, но он может попробовать использовать какой-то другой
3. В этом случае я бы предложил использовать лучшее из обоих миров, вместо этого напечатать сообщение об исключении и разрешить продолжение выполнения.
4. Мне кажется логичным, я добавлю его в решение
Ответ №3:
Вы можете попробовать это 🙂
a = 0
sum = 0
while 1==1:
a = input()
if a == '=':
print(sum)
break
sum = int(a)