我的代码中有一个我无法识别的bug。如果列表包含[3,3]
,则此代码应返回True
。你知道吗
但是,如果我写一个else
条件,它总是显示False
。如果跳过else
条件,代码就可以正常工作。你知道吗
def has_33(nums):
for i in range(0,len(nums)-1):
if nums[i]==3 and nums[i+1]==3:
return True
else:
return False
pass
上述代码返回:
# Check
has_33([1, 3, 3]) . -- > False
# Check
has_33([1, 3, 1, 3]) --> False.
但是,如果我把代码改成这样:
def has_33(nums):
for i in range(0,len(nums)-1):
if nums[i]==3 and nums[i+1]==3:
return True
pass
代码运行良好:
# Check
has_33([1, 3, 3]) --> True
# Check
has_33([1, 3, 1, 3]) -- > Returns nothing , False.
为什么会这样?你知道吗
因为else条件是先满足的。 有一个for循环遍历列表[1,3,3]中的所有数字,首先检查第一个数字是1,然后检查第二个数字是3
在本例中,nums[i]是1,这意味着nums[i]==3不是真的,这意味着您的代码将直接转到
Else
解决问题的方法很简单:
像这样尝试,错误发生在代码中,因为它将在第一个循环中返回并从代码中退出。因此,您可以给出一个标志,只要条件满足,就将该标志更改为true,然后最后返回该标志:
其他答案很好地解释了这个错误。不过,我确实想指出两点。你知道吗
for n in nums
)。你知道吗考虑以下使用
any()
和zip()
内置函数的代码。你知道吗如果您愿意,您可以使它更通用,以便它可能适用于其他项目。使用默认值将保留原始行为。你知道吗
相关问题 更多 >
编程相关推荐