我有一些表现不正常的功能:
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());
结果是False
。 raw_input('Done!')
确实出现了,但它毕竟返回False。
为什么会这样?
答案 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();
请记住,如果您在变量名称的末尾看到()
表示正在执行某个函数(或者您有语法错误)