bothon语句和python中的if语句的问题

时间:2014-07-21 15:48:08

标签: python if-statement while-loop boolean boolean-expression

def test():
    boo = True
    enter = int(raw_input("Enter something: "))
    if enter > 0:
        boo = False
        print "Did it work?!"
    else:
        print "Still working..."
    while boo == True:
        test()

test()

所以这段代码似乎只有在第一次遇到if语句的第一部分时才能工作。 又如果你输入-1然后1继续循环该函数。我做错了什么?

2 个答案:

答案 0 :(得分:2)

boo本地变量。每次递归调用test()时,该递归调用都会获得一个 new 局部变量boo,该变量独立于调用它的所有父函数。因此,它在函数的开头设置为True

您的通话如下:

  • test()boo = Trueenter = 1,所以while boo == True为真:

    • test()boo = Trueenter = -1,因此while boo == True为false,返回
  • 在此级别,boo == True 仍为真,因此我们再次致电test()

    • test()boo = Trueenter = -1,因此while boo == True为false,返回

等。 ad nauseum。

您希望返回 boo

def test():
    boo = True
    enter = int(raw_input("Enter something: "))
    if enter > 0:
        boo = False
        print "Did it work?!"
    else:
        print "Still working..."
    while boo:
        boo = test()
    return boo

现在,当test()返回时,您将调用函数中的boo 设置为False

请注意,== True是多余的,只需在boo中测试while boo本身。

将递归用于用户输入真的不是一个好主意。只需使用while循环:

while True:
    enter = int(raw_input("Enter something: "))
    if enter < 0:
        print "Did it work?!"
        break
    print "Still working..."

答案 1 :(得分:2)

将潜在的无限while循环与递归函数相结合是一项非常危险的游戏。当您接到test()的后续呼叫时,即使他们正常工作并立即退出,您对test()的原始呼叫仍将永远循环。 boo永远不会在原始函数调用中更改,因为它在以后的函数中已更改。

您的代码可以通过以下方式修复:

def test():
    boo = True
    enter = int(raw_input("Enter something: "))
    if enter > 0:
        boo = False
        print "Did it work?!"
    else:
        print "Still working..."
    if boo == True:
        test()

但这样做会更好:

def test():
    enter = int(raw_input("Enter something: "))
    while enter <= 0:
        print "Still working..."
        enter = int(raw_input("Enter something: "))
    print "Did it work?!"