簡體   English   中英

為什么這個 if 語句不能用於檢查數組是否具有特定數字?

[英]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 (在整個列表中搜索元素)

inor綁定得更緊密,因此 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM