[英]Why doesn't this if statement work for checking if an array has a specific number?
給定一個長度為 2 的 int 數組,如果它包含 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
問題在於if
條件
if 2 or 3 in nums[0:1]
如果3 in nums[0:1]
中的2
或 3 中的任何一個計算為True
True
在這種情況下, 2
將始終評估為 True,因此,您的代碼每次都返回True
。
旁注:這種情況還有另一個問題。 它只會檢查數組的第一個元素(而不是完整的數組)。 nums[0:1]
返回從第 0 個索引開始到第一個索引之前結束的元素(不包括第一個索引)。 所以,在這種情況下,它只會返回第一個元素。
把它改成這樣:
if 2 in nums or 3 in nums:
如果 nums 中的2 in nums
3 in nums
計算結果為True
,則此條件將返回True
(在整個列表中搜索元素)
in
比or
綁定得更緊密,因此 nums[0:1] 中的語句2 or 3 in nums[0:1]
等價於2 or (3 in nums[0:1])
。 由於or
將短路,並且2
始終為真,后半部分永遠不會被評估,並且 if 語句始終評估為 true。
比較可以重寫為3 in nums or 4 in nums
,相當於(3 in nums) or (4 in nums)
。
構造:
if foo:
return True
else:
return False
其中 foo 是 boolean 值相當於:
return foo
將這些放在一起 function 可以重寫為
def has23(nums):
return 2 in nums or 3 in nums
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.