返回真假(Python)

时间:2015-08-20 15:59:47

标签: python python-2.7

我有一些表现不正常的功能:

pos = [' '] * 9;
def defense_ai():
    #if statement
    if pos.count('X') > 1:
        #various other if statements
        if statement:
            #statement
            a = 5;
        #...
    else:
        return False;
    pos[a] = 'O';
    raw_input('Done!')
    return True;
def offense_ai():
    #statement that doesn't matter
    pass;
def main():
    defense_ai();
    if not defense_ai():
        offense_ai();
main();

我的问题是,raw_input('Done')正在执行,但随后offense_ai()运行。这不应该发生,因为defense_ai应该在True被调用后立即返回raw_input。要查看defense_ai()返回的内容,我在raw_input()语句之前添加了if not defense_ai()

raw_input(defense_ai());

结果是Falseraw_input('Done!')确实出现了,但它毕竟返回False。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

这看起来像代码的可疑部分:

defense_ai();
if not defense_ai():
    offense_ai();

似乎你误解了,在一行上调用defense_ai()本身并没有对它返回的值做任何事情。您需要将其分配给某些东西才能使用返回值,如下所示:

defenseResult = defense_ai();

在这种情况下,这可能是您想要用于if声明的内容。

if not defenseResult:
    offense_ai();

问题是,即使在defense_ai()语句中调用if,也会导致函数的代码被执行,因此您的代码会运行两次并造成混淆。但是,您可以使用此功能而不是为了分配返回结果,而只需将defense_ai作为if语句的一部分调用一次。

像这样:

def main():
    if not defense_ai():
        offense_ai();

请记住,如果您在变量名称的末尾看到()表示正在执行某个函数(或者您有语法错误)