2015-03-17 6 views
-3

Я пытаюсь использовать эту программу, которую я создал, и я хочу, чтобы программа не повторять опции много раз здесь есть программа:Python Хотя цикл продолжает повторять

# A Program to show how to use a menu 
menu=int(input("What would you like? \n\ 
1. A compliment \n\ 
2. An insult \n\ 
3. A proverb \n")) 
y=True 
while y==True: 
    if menu==1: #compliment 
      print ("You look nice today") 
    elif menu==2: #insult 
      print("You smell") 
    elif menu==3: #proverb 
      print("A bird in the hand is worth two in the bush!") 
    else: 
      y==False 
      print("Invalid option") 
      break 

Что происходит, что когда я печатаю в варианте, например, 2 повторяет программу Вы чувствуете запах Запах Запах Запах Запах Бесконечное время.

+0

'' y == False '! =' Y = False'' ... – jonrsharpe

+0

Ваше состояние никогда не становится ложным. Если вы хотите, чтобы он разразился, вы могли бы A) положить в оператор break или B) добавить 'y = False', чтобы остановить ваш оператор while. Я не уверен в опции A, потому что python не поддерживает 'break' в выражении' if', но он _might_ (возможно) работает, так как он находится в инструкции 'while'. – Jared

ответ

0

Ваша while петля никогда не заканчивается. У вас есть перерыв под вашим окончательным «else», но вы предполагаете, что ваша переменная menu будет фактически изменена. Вы не должны быть зацикливание на ответ, но вместо того, чтобы в целом как таковой:

y=True 
while y==True: 
    menu=int(input("What would you like? \n\ 
    1. A compliment \n\ 
    2. An insult \n\ 
    3. A proverb \n")) 

    if menu==1: #compliment 
     print ("You look nice today") 
    elif menu==2: #insult 
     print("You smell") 
    elif menu==3: #proverb 
     print("A bird in the hand is worth two in the bush!") 
    else: 
     print("Invalid option ") 
     y = False 

выше будет работать до тех пор, ошибочный параметр не будет введен, а затем цикл будет ломаться. Ваш исходный код никогда не сломается, так как y никогда не может быть изменен. Ваш y==False - операция сравнения, а не операция присваивания. Тем не менее, это STILL никогда не пострадает, потому что вы не запрашиваете дополнительный ввод в своем цикле, чтобы он оставался TRUE навсегда.

0

У вас есть 2 проблемы. Как @Arrjun Ram упомянул вас есть y==False, когда вам нужно y=False

Другой вопрос, у вас есть то, что ваш призыв к input находится вне контура while. Это означает, что значение меню никогда не изменится. Вам нужно переместить его внутрь петли while.

Вы также можете добавить опцию, например 4, чтобы выйти из цикла.

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