给出一个整数数组长度2,如果它包含2或3,则返回True。我不能使用循环。大多数测试用例都可以工作,除了:
has23([4, 5]) --> False (my code returns True)
has23([7, 7]) --> False (my code returns True)
has23([9, 5]) --> False (my code returns True)
我的代码:
def has23(nums):
if 2 or 3 in nums[0:1]:
return True
else:
return False
def has23(nums):
if (2 or 3) in nums[0:1]:
return True
else:
return False
否则,支票将变为2或(3为数字[0:1])。
if
条件上if 2 or 3 in nums[0:1]
如果True
或2
中的任何一个求值为3 in nums[0:1]
,则您的条件将返回True
。在这种情况下,2
将始终计算为True,因此,您的代码每次都会返回True
。旁注:这种情况还有另一个问题。它将only检查数组的第一个元素(而不是整个数组)。
将其更改为类似的内容:nums[0:1]
返回从第0个索引开始到第一个索引之前的元素(不包括第一个索引)。因此,在这种情况下,它将仅返回第一个元素。
if 2 in nums or 3 in nums:
如果True
或2 in nums
的值等于3 in nums
(在整个列表中搜索元素),此条件将返回True
in
比or
绑定更紧密,因此语句2 or 3 in nums[0:1]
等效于2 or (3 in nums[0:1])
。因为or
会短路,并且2
始终为true,所以从不评估后半部分,并且if语句始终为true。比较可以重写为3 in nums or 4 in nums
,它等效于(3 in nums) or (4 in nums)
。
构造:
if foo:
return True
else:
return False
其中foo是布尔值等效于:
return foo
将这些功能放在一起可以重写为
def has23(nums): return 2 in nums or 3 in nums