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会继续遍历该函数。我究竟做错了什么?

最佳答案

boo是局部变量。每次递归调用test()时,该递归调用都会获得一个新的局部变量boo,该局部变量与调用它的所有父函数无关。因此,在函数开始时将其设置为True

您的通话如下所示:


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


test()boo = Trueenter = -1,所以while boo == True为false,返回






在此级别上,boo == True仍然为true,因此我们再次调用test()


test()boo = Trueenter = -1,所以while boo == True为false,返回



等等。

您要返回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..."

关于python - boolean 语句和python中的if语句的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24869248/

10-12 22:46