我对Python有一个非常基本的if / else逻辑问题。本书中的练习要求我编写一个函数,该函数采用整数列表,如果列表包含所有偶数,则返回True;如果不包含,则返回False。
我写道:
list1 = [8,0,-2,4,-6,10]
list2 = [8,0,-1,4,-6,10]
def allEven(list):
for x in list:
if x % 2 != 0:
return False
else:
return True
此代码始终返回True。这是为什么?代码在循环中是否在列表的所有值中都看到-1并返回False?
list1 = [8,0,-2,4,-6,10]
list2 = [8,0,-1,4,-6,10]
def allEven(list):
for x in list:
if x % 2 != 0:
return False
return True
这本书给出了答案。为什么这个工作而我的工作没有?
答案 0 :(得分:1)
支付密切关注到else
所在的位置。压痕和嵌套在这里很重要!
在第一个示例中,它会在满足您条件的第一个元素上返回True
,因为您的第一个if
检查失败。
在第二个示例中,在迭代完所有元素并且尚未生成返回值之后,它将返回True
。
答案 1 :(得分:0)
第一个函数仅检查第一个数字,因为它会在for循环开始后立即返回。
顺便说一下,你可以但不应该使用list
作为参数或变量名,因为它是一个关键字。
答案 2 :(得分:0)
我强烈建议在两个return语句之前将print语句写入输出x。它将帮助您了解代码的流程。
简短的回答是,代码只检查第一个元素,函数根据该值返回True或False。
在书籍解决方案中,任何失败都会导致返回False,但循环只会继续。只有在没有失败的情况下检查所有元素时,才会返回True。