2017-10-11 73 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就会变成错误,终止循环。这也使得它更易于阅读。