我遇到这个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)
你的第一个不起作用,因为for
Python中的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)