首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这种情况下,if语句和elif语句之间的区别?

在这种情况下,if语句和elif语句之间的区别?
EN

Stack Overflow用户
提问于 2020-03-21 05:50:34
回答 3查看 88关注 0票数 1
代码语言:javascript
复制
def is_stylish(pants_colour, shirt_colour):
    """returns a Boolean True or False to indicate whether the given combination is stylish or not"""
    if pants_colour == 'blue' and shirt_colour =='black':
        return True 
    if pants_colour == 'chocolate' and shirt_colour == 'orhre':
        return False
    if pants_colour == 'blue' and shirt_colour == 'ochre':
        return True
    if pants_colour == 'chocolate' and shirt_colour == 'black':
        return False
print(is_stylish('chocolate', 'ochre'))

上述程序的结果为零。但是,如果我将其更改为“elif语句”,则程序运行良好。我看不出这两个程序之间有什么区别。

这是我对执行的基本理解。

对于第一个程序:将计算每个'if语句‘,如果满足条件,则应该执行块;如果是这样,则结果是False

对于第二个程序:如果满足前面的条件,那么将跳过以下语句并导致结果。

代码语言:javascript
复制
def is_stylish(pants_colour, shirt_colour):
    """returns a Boolean True or False to indicate whether the given combination is stylish or not"""
    if pants_colour == 'blue' and shirt_colour =='black':
        return True 
    elif pants_colour == 'chocolate' and shirt_colour == 'orhre':
        return False
    elif pants_colour == 'blue' and shirt_colour == 'ochre':
        return True
    else: 
        return False
print(is_stylish('blue', 'ochre'))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-21 06:14:31

Ex.1.

第一个程序的

:将对每个if语句进行评估,如果满足条件,则应该执行块;如果是这样,则结果应该为False。

此语句与代码实际执行的内容不匹配。

print(is_stylish('chocolate', 'ochre'))无法返回FalseFalse的旧组合如下:

代码语言:javascript
复制
pants_colour == 'chocolate' and shirt_colour == 'orhre'  # !note: 'orhre' is not 'ochre'
pants_colour == 'chocolate' and shirt_colour == 'black'

因此,所有条件都不满足,函数没有任何其他return,因此它不会返回任何条件。

Ex.2.

第二个程序的

:如果满足前面的条件,那么将跳过以下语句并导致结果。

这是正确的,在您的例子中,它进入elif pants_colour == 'blue' and shirt_colour == 'ochre'并返回True。

差异:除了您已经提到的以外,两个示例之间的主要区别是,在示例2中,您有涵盖所有其他情况的else: return False条件,因此,如果else之前的任何条件都没有满足,则函数将返回False,而不是None。

在第一个例子中,如果没有满足任何条件,它只会遍历所有条件,不会命中任何条件,也不会返回任何条件。

票数 1
EN

Stack Overflow用户

发布于 2020-03-21 06:08:21

因为如果条件为真,则在每个if语句处返回,因此两段代码都只有一个匹配项。

对于第一个程序:每个if语句都将按顺序进行计算,如果满足条件,则return代码将在该块返回,其余的代码将不会被执行。在您的例子中,它将返回到第6行,其余的代码将不会被删除。如果不满足任何条件,则什么也不返回。

对于第二个程序:如果要满足一个条件,它的作用就像第一个程序。如果没有满足任何条件,则返回默认的False

票数 1
EN

Stack Overflow用户

发布于 2020-03-21 06:12:41

我认为您的主要问题是在ochre检查行中将orhre拼写为orhre,然后使用chocolate/ochre测试第一个,使用blue/ochre测试第二个。如果您使用blue,第一个也会起作用的。

修复这个小问题,您也会从第一段代码中得到一个非None的结果,即使使用chocolate

您的第二个示例也无法返回None,因为其中一个if/elif语句将触发,或者else将触发。第一个示例中的等效值是函数末尾的无条件return False

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

https://stackoverflow.com/questions/60784876

复制
相关文章

相似问题

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