我有一些行为不正常的函数:
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
应该在raw_input
被调用后立即返回True
。为了检查defense_ai()
返回什么,我在if not defense_ai()
语句之前添加了一个raw_input()
。
raw_input(defense_ai());
结果是False
。raw_input('Done!')
确实出现了,但它毕竟返回False。
为什么会发生这种情况?
这看起来像是一段可疑的代码:
defense_ai();
if not defense_ai():
offense_ai();
似乎你误解了,在一行中调用defense_ai()
本身并没有对它返回的值做任何事情。为了使用返回值,您需要将它赋值给某些东西,如:
defenseResult = defense_ai();
在这种情况下,这可能是您想要使用的if
语句。
if not defenseResult:
offense_ai();
问题是,即使在if
语句中调用defense_ai()
,也会导致函数的代码被执行,所以你的代码运行两次,造成混乱。但是,您可以使用此方法,而不需要为返回结果赋值,并且只作为if
语句的一部分调用defense_ai
一次。
:
def main():
if not defense_ai():
offense_ai();
只要记住,如果你在变量名后面看到()
表示函数正在执行(否则你有语法错误)