2014-11-05 141 views
-1

当我为例如选择1时,代码“执行某些操作”,但不会再次重复该菜单。相反,它显示“1”。为什么?我该如何解决这个问题?使用while循环进行迭代 - python

menu = input('1. \n 2. \n') 


choice = input(menu) 


while choice in ['1', '2']: 

    print(input(menu)) 

    if choice == 1: 
     #do something 

    elif choice == 2: 
     #do something 

    else: 
     break 
+2

您在['1','2']中有'while choice':...'对于这种情况永远是'True','choice'必须是一个字符串。然而,在循环体内,你正在比较'choice == 1',它将选择与一个整数进行比较,因此它将不会执行... – mgilson 2014-11-05 06:20:52

+0

它更好地使用'raw_input'而不是'input'。所以你应该使用'int(raw_input(something here))'。 – 2014-11-05 06:33:13

+0

多个问题: *您可以在整个地方调用输入,让菜单为字符串,然后在需要输入时调用menu() *在while语句中,与字符串进行比较,但在输入上输入runns eval,一个int – 2014-11-05 06:33:15

回答

-1

放入循环中的菜单,并更改字符串整数,像这样:

menu = 'Type 1 or 2: ' 
choice = input(menu) 
while choice in [1, 2]: 
    if choice == 1: print 11111 
    elif choice == 2: print 22222 
    choice = input(menu) 
0

你与int
你的选择是type int,输入默认取为string比较string

演示:

>>>'1' == 1 
False 

尝试这样的:

def take_input(): 
    menu = input('1. \n 2. \n') 
    return menu 
menu = take_input() 
while menu in ['1', '2']: 
    if menu == '1': 
     #do something 
     menu = take_input()   
    elif menu == '2': 
     #do something 
     menu = take_input() 
    else: 
     break 

您可以删除不需要的while menu in ['1','2']

while True: 
    menu= take_input() 
    if menu == '1': 
     #do something 
     menu= take_input() 
    elif menu=='2': 
     #do something 
     menu= take_input() 
    else:break 
0

你去那里。我不知道你为什么这样做choice = input(menu)我取代了它。我已经把break停止执行,因为它会进入无限循环。您希望它变成无限,然后删除breakwhile内部的else零件将永远不会执行,因为您正在检查choice是“1”还是“2”。

def display_menu(): 
    menu = input('1. \n 2. \n') 
    return str(menu) 

def get_choice(): 
    choice = display_menu() 
    while choice in ['1', '2']: 
     if choice == "1": 
      print "inside if condition" 
      get_choice() 

     elif choice == "2": 
      print "inside elif condition" 
      #do something 
      get_choice() 
     else: 
      print "inside else condtion" 
      break 

get_choice() 
+0

OP只想打破'input'不是1或2 – Hackaholic 2014-11-05 06:35:29

+1

但我需要每次显示菜单。就像用户输入1一样,程序会执行一些操作,然后再次显示菜单。 – 2014-11-05 06:36:40

+0

@Hackaholic如果输入不是1或2,那么in甚至不会进入'while'循环。如果它是1或2,那么它进入无限循环,所以我已经把'break' – 2014-11-05 06:39:15