首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回真假(Python)

返回真假(Python)
EN

Stack Overflow用户
提问于 2015-08-20 15:59:46
回答 1查看 990关注 0票数 1

我有一些行为不规范的职能:

代码语言:javascript
复制
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()

代码语言:javascript
复制
raw_input(defense_ai());

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

为什么会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-20 16:16:51

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

代码语言:javascript
复制
defense_ai();
if not defense_ai():
    offense_ai();

似乎您误解了,在一行上调用defense_ai()本身不会对它返回的值做任何事情。为了使用返回值,您需要将它赋值给某物,如下所示:

代码语言:javascript
复制
defenseResult = defense_ai();

在这种情况下,这很可能是您希望用于if语句的。

代码语言:javascript
复制
if not defenseResult:
    offense_ai();

问题是,即使在一个defense_ai()语句中调用if,也会导致函数的代码被执行,所以您的代码运行了两次并造成混乱。但是,您可以使用它来避免分配返回结果,并且只调用defense_ai一次,作为if语句的一部分。

如下所示:

代码语言:javascript
复制
def main():
    if not defense_ai():
        offense_ai();

请记住,如果您在变量名的末尾看到(),这意味着正在执行一个函数(否则就会出现语法错误)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32123000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档