2017-01-13 2 views
0

Сначала немного о самой программе:Как использовать условный тест для выхода из цикла while?

  • Условный тест начинается цикл While (я должен использовать условный тест, чтобы начать и закончить цикл, без флагов и никаких заявлений перерыва)
  • Просит пользователей возраст (пользовательский ввод)
  • в зависимости от пользовательского ввода, он печатает разные ответы

Моя проблема заключается в том, что я хочу, чтобы программа закончится, если пользовательский ввод «бросить». Пользовательский ввод будет, кроме того, «quit» всегда быть int, потому что программа проверяет возраст пользователей.

Это мой код:

prompt = "\nPlease enter your age to see the price for a ticket. \nEnter 'quit' when done: " 

age = "" 

while age != "quit": 
    age = input(prompt) 
    age = int(age) 
    if age < 3: 
     print("Your ticket is free.") 
    elif age > 3 and age < 12: 
     print("Ticket is $10") 
    else: 
     print("Ticket is $15") 

Это ошибка, я получаю, когда я поставил «бросить» в качестве входных данных:

Please enter your age to see the price for a ticket. Enter 'quit' when done: quit 
Traceback (most recent call last): File "while_loops.py", line 60, in <module> 
    age = int(age) ValueError: invalid literal for int() with base 10: 'quit' 

Большое спасибо за ваше время и усилия! С наилучшими пожеланиями, HWG.

+1

'raw_input' только py2. –

+0

Вы можете сравнить цепи: '3 chepner

ответ

3

Проверьте на quit, прежде чем пытаться конвертировать в int. Запускайте в бесконечном цикле и выходите из него, когда вы читаете ввод quit.

prompt = "\nPlease enter your age to see the price for a ticket. \nEnter 'quit' when done: " 

while True: 
    age = input(prompt) 
    if age == "quit": 
     break 
    age = int(age) 
    if age < 3: 
     print("Your ticket is free.") 
    elif age > 3 and age < 12: 
     print("Ticket is $10") 
    else: 
     print("Ticket is $15") 

Alternative, которые отвечают критериям добавлены

не использовать 'перерыв' или переменную как флаг

Использование исключение

while ageStr != "quit": 
    ageStr = input(prompt) 

    try: 
     age = int(ageStr) 
     if age < 3: 
      print("Your ticket is free.") 
     elif age > 3 and age < 12: 
      print("Ticket is $10") 
     else: 
      print("Ticket is $15") 
    except ValueError: 
     pass 

Использование продолжения.
Примечание: это плохо, поскольку вы указываете и дважды проверяете «quit» в коде, и поток управления слишком сложный.

prompt = "\nPlease enter your age to see the price for a ticket. \nEnter 'quit' when done: " 

age = "" 

while age != "quit": 
    age = input(prompt) 
    if age == "quit": 
     continue 

    age = int(age) 
    if age < 3: 
     print("Your ticket is free.") 
    elif age > 3 and age < 12: 
     print("Ticket is $10") 
    else: 
     print("Ticket is $15") 
+0

Назначение состояло в том, чтобы не использовать 'break' или переменную как флаг. Я должен использовать условный тест в выражении «while». Я не знаю, может ли это трюк вопрос и не возможно? – HWG

+0

как насчет продолжения или исключения? В противном случае я не вижу, как он может работать. Хотелось бы, чтобы они преподавали язык как предполагаемый для его использования, вместо того, чтобы иметь эти странные ограничения, которые заставляют вас писать не идиоматический код. –

+0

Могу ли я использовать для продолжения работы? Если да, то как? – HWG

2
while True: 
    age = input("\nPlease enter your age to see the price for a ticket. \n Enter 'quit' when done: '" 
    if age == 'quit': 
     break 
    # continue with the rest of your code 

Просто проверьте, чтобы увидеть, если вход «бросить курить», если да, то вырваться из бесконечного цикла.

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