2017-10-11 50 views
0

所以,你好!我正在編寫我的第一個程序,我需要下一個問題的幫助: 以下代碼正在獲取一個str,然後詢問是否應該獲得另一個字符串。如果答案是肯定的,它應該詢問下一個字符串,但如果答案是否定的,它應該打破「while」的循環。事實上,發生什麼事情的週期只有在你進入許多項目之後才能完成。 以下是webinterpriter的link。 對不起,我的英語。不能打破「而」週期

inplist = [] 
def products_inp(): 
    inp = "" 
    inp = input("lets see watcha got...\n") 
    inplist.append(inp) 
    print(inplist) 
    while True: 
     selector = "" 
     selector = input("smth else? (Y/N)\n") 
     if selector.lower() == 'y': 
      products_inp() 
     elif selector.lower() == 'n': 
      print("Got'em! loading...") 
      break 
     else: 
      print("aint got it...") 
products_inp() 
+2

問題是,你遞歸調用你的函數,這意味着你嵌套while循環,每個函數都必須被破壞。你需要重新考慮你的方法。 –

+0

'return products_inp()'會做。 – kindall

+0

謝謝你們! –

回答

1

可行:

def myfunc(): 
    while True: 
    # do something static here. 
    if condition: 
     break 

並不可行:

def myfunc(): 
    while True: 
    myfunc() 
    break 

與前安裝的,只要你不叫myfunc(),破斷僅while循環。使用後者(您的)設置,每次您在函數中調用myfunc()時,都會創建一個嵌套的while True循環。你必須打破每一個。

1

因爲您遞歸調用函數,所以您正在嵌套您的while循環,這意味着它需要在每次調用函數時分解出來。這將是更好地排除導致從功能整個循環中

inplist = [] 
def products_inp(): 
    inp = "" 
    inp = input("lets see watcha got...\n") 
    inplist.append(inp) 
    print(inplist) 

while True: 
    selector = "" 
    selector = input("smth else? (Y/N)\n") 
    if selector.lower() == 'y': 
     products_inp() 
    elif selector.lower() == 'n': 
     print("Got'em! loading...") 
     break 
    else: 
     print("aint got it...") 
0

其他的答案是正確的,另一種方法來解決問題這樣是不使用,你必須打破while循環。有時候沒有辦法解決這個問題,但在你的情況下,你可以很容易地將你的代碼重新排列成一個接受用戶輸入的函數,然後是一個帶有布爾表達式的while循環,這樣,如果用戶想要輸入更多,它仍然是真實的,如果他們輸入n就會變成錯誤,終止循環。這也使得它更易於閱讀。