Python - 布尔条件错误(?)

时间:2017-12-07 00:13:52

标签: python return

您好,

我试图 return_3 return_6 return_9 来检查 all_return_values_func <返回的总值是否< / strong>高于20.问题是,当我运行脚本 return_3 时,它会立即打印&#34;返回值的总数太高&#34;。

为什么 all_return_values_func / return_value 计算出第一次 return_3 运行时大于20?

脚本的目的是从每个return_3 / return_6 / return_9脚本开始,并使这些函数中的每一个都添加到函数 all_return_values_func 中,如果超过20,则稍后检查该函数值在函数 return_value

from sys import exit
import time

def all_return_values_func():
    combined_return_values = return_3() + return_6() + return_9()
    return combined_return_values

def return_value(i):
    if i > 20:
        print "The value is above 20"
        time.sleep(2)
        exit()



def return_3():

    return_value(all_return_values_func)    
    print "Returns integer value: 3 and then jumps to function: return_6"
    time.sleep(2)
    return_6()
    return 3


def return_6():

    return_value(all_return_values_func)    
    print "Returns integer value: 6 and then jumps to function: return_9"
    time.sleep(2)
    return_9()
    return 6

def return_9():

    return_value(all_return_values_func)
    print "Returns integer value: 9"
    time.sleep(2)
    return_3()
    return 9

return_3()

干杯,

西蒙

1 个答案:

答案 0 :(得分:0)

问题在于:

return_value(all_return_values_func)

您未在all_return_values_func调用return_value(),因此您正在比较函数本身是否大于20.在Python 2.x中,您正在使用,这总是如此:任何函数都大于任何整数。 (这种比较在Python 3.x中引发了一个错误,这是一个不那么神秘的错误。)

解决方案是实际调用函数:

return_value(all_return_values_func())

但是,这并不是一个真正的解决方案,因为调用该函数会导致程序进入递归循环。 all_return_values_func()调用return_3()调用all_return_values_func()调用调用return_3()的{​​{1}} ...当堆栈达到1000个调用时,Python将抛出all_return_values_func()深。

你的程序似乎没有做任何有用的事情,甚至没有多大意义。也许在继续之前解决这个问题。