if语句为什么不能用于检查数组是否具有特定数字?

问题描述 投票:0回答:3

给出一个整数数组长度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
python arrays list int
3个回答
0
投票
您需要括号

def has23(nums): if (2 or 3) in nums[0:1]: return True else: return False

否则,支票将变为2或(3为数字[0:1])。

0
投票
问题出在if条件上

if 2 or 3 in nums[0:1]

如果True2中的任何一个求值为3 in nums[0:1],则您的条件将返回True。在这种情况下,2将始终计算为True,因此,您的代码每次都会返回True

旁注:这种情况还有另一个问题。它将only检查数组的第一个元素(而不是整个数组)。 nums[0:1]返回从第0个索引开始到第一个索引之前的元素(不包括第一个索引)。因此,在这种情况下,它将仅返回第一个元素。

将其更改为类似的内容:

if 2 in nums or 3 in nums:

如果True2 in nums的值等于3 in nums(在整个列表中搜索元素),此条件将返回True

0
投票
inor绑定更紧密,因此语句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

© www.soinside.com 2019 - 2024. All rights reserved.