2017-01-22 3 views
0

Я не уверен, почему мой оператор break не работает.Перерыв не работает в моей инструкции IF

lst = [] 

while True: 
    try: 
     number = int(raw_input("Enter a number: ")) 
     lst.append(number) 
     print lst 
     if number == 'q': 
      break 
    except: 
     print "Please enter a number!" 
+9

Как 'number' быть' q', если вы преобразуете его в 'int'. –

+0

Ahhh ... и спасибо за редактирование для меня. Это создает общий смысл. Я вернусь и переписал его. Думаю, я включу его в int внутри append. Спасибо. – magic9669

+2

вам нужно проверить ** перед добавлением **. –

ответ

0

Проблема с кодом является то, что вы первый запрос для ввода с raw_input, но сразу преобразовать его в int(..).

Есть два варианта: либо это удастся, в этом случае обработка выполняется путем добавления, но в этом случае number никогда не может быть 'q', или, если это q, int(..) не удается, выдает ошибку, и вы будете выполнять except: филиал.

Вы можете исправить это первое хранение вход (например, в number), проверьте, если он 'q' и если нет, то процесс это, что-то вроде:


lst = [] 

while True: 
    try: 
     number = raw_input("Enter a number: ") # no int(..) 
     if number == 'q': 
      break 
     else: 
      lst.append(int(number)) 
      print lst 
    except: 
     print "Please enter a number!" 

Вы можете оставить else: (только else: не является телом else:) из программы, как говорит @schwobaseggi.

+0

Нет необходимости в 'else' – schwobaseggl

+0

@schwobaseggl: Я согласен, но он делает код, на мой взгляд, более читаемым * (семантически оба эквивалентны, но вам нужно подумать о побочных эффектах' break'). –

+1

Этот код должен быть реструктурирован, что позволит избежать необходимости в 'else'. Во-первых, вызов 'raw_input' и оператора' if' может быть удален из инструкции 'try'. Во-вторых, вы не должны использовать панель 'except'; только поймайте исключение (ы), которое вы * знаете *, как бороться, что в этом случае действительно является только значением ValueError, которое 'int' может поднять. – chepner

Смежные вопросы