无法打破"而#34;循环

时间:2017-10-11 22:41:14

标签: python python-3.x while-loop break

所以,你好!我正在编写我的第一个程序,我需要帮助解决下一个问题: 下面的代码得到一个str然后询问它是否会得到另一个字符串。如果答案是肯定的,那么它应该要求下一个字符串,但如果答案为否,那么它应该打破周期"而#34;。事实上,正在发生的周期只有在你工作了很多次之后才会破裂。 这是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()

3 个答案:

答案 0 :(得分:1)

存活:

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

不可行:

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

使用以前的设置,只要您不打电话给myfunc(),就会打破唯一的循环。使用后一种设置(您的),每次从函数中调用myfunc()时,都会创建一个嵌套的while True循环。你必须打破其中的每一个。

答案 1 :(得分: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...")

答案 2 :(得分:0)

其他答案是正确的,解决这类问题的另一种方法是不使用你必须打破的while循环。有时候没有办法绕过这个但是在你的情况下你可以很容易地将你的代码重新排列成一个接受用户输入的函数,然后是一个带有布尔表达式的while循环,这样如果用户想要输入更多,它仍然是真的,如果他们输入n它会成为错误终止循环。这也使它更容易阅读。