Как можно написать скрипт, который останавливается, когда я пишу =?

#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)