2014-11-05 185 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