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。
对于第二个程序:如果满足前面的条件,那么将跳过以下语句并导致结果。
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'))发布于 2020-03-21 06:14:31
Ex.1.
第一个程序的
:将对每个if语句进行评估,如果满足条件,则应该执行块;如果是这样,则结果应该为False。
此语句与代码实际执行的内容不匹配。
print(is_stylish('chocolate', 'ochre'))无法返回False,False的旧组合如下:
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。
在第一个例子中,如果没有满足任何条件,它只会遍历所有条件,不会命中任何条件,也不会返回任何条件。
发布于 2020-03-21 06:08:21
因为如果条件为真,则在每个if语句处返回,因此两段代码都只有一个匹配项。
对于第一个程序:每个if语句都将按顺序进行计算,如果满足条件,则return代码将在该块返回,其余的代码将不会被执行。在您的例子中,它将返回到第6行,其余的代码将不会被删除。如果不满足任何条件,则什么也不返回。
对于第二个程序:如果要满足一个条件,它的作用就像第一个程序。如果没有满足任何条件,则返回默认的False
发布于 2020-03-21 06:12:41
我认为您的主要问题是在ochre检查行中将orhre拼写为orhre,然后使用chocolate/ochre测试第一个,使用blue/ochre测试第二个。如果您使用blue,第一个也会起作用的。
修复这个小问题,您也会从第一段代码中得到一个非None的结果,即使使用chocolate。
您的第二个示例也无法返回None,因为其中一个if/elif语句将触发,或者else将触发。第一个示例中的等效值是函数末尾的无条件return False。
https://stackoverflow.com/questions/60784876
复制相似问题