如果数组包含2或3,则返回True

Jod*_*son 3 python python-2.7

我遇到这个CodingBat问题:

给定int数组长度2,如果它包含2或3,则返回True.

我尝试了两种不同的方法来解决这个问题.谁能解释我做错了什么?

#This one says index is out of range, why?
def has23(nums):
 for i in nums:
  if nums[i]==2 or nums[i]==3:
   return True
  else:
   return False
Run Code Online (Sandbox Code Playgroud)
#This one doesn't past the test if a user entered 4,3.
#It would yield False when it should be true. Why?
def has23(nums):
 for i in nums:
  if i==2 or i==3:
   return True
  else:
   return False
Run Code Online (Sandbox Code Playgroud)

Ble*_*der 7

你的第一个不起作用,因为forPython中的for循环与其他语言中的循环不同.它不是迭代索引,而是迭代实际元素.

for item in nums 大致相当于:

for (int i = 0; i < nums.length; i++) {
    int item = nums[i];

    ...
}
Run Code Online (Sandbox Code Playgroud)

你的第二个不起作用,因为它False太快返回.如果循环遇到的值不是2或者3,则返回False并且不循环遍历任何其他元素.

将你的循环改为:

def has23(nums):
    for i in nums:
        if i == 2 or i == 3:
            return True  # Only return `True` if the value is 2 or 3

    return False  # The `for` loop ended, so there are no 2s or 3s in the list.
Run Code Online (Sandbox Code Playgroud)

或者只是使用in:

def has23(nums):
    return 2 in nums or 3 in nums
Run Code Online (Sandbox Code Playgroud)