我遇到了这个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
#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
答案 0 :(得分:6)
你的第一个不起作用,因为Python中的for
循环与其他语言中的for
循环不同。它不是迭代索引,而是迭代实际元素。
for item in nums
大致相当于:
for (int i = 0; i < nums.length; i++) {
int item = nums[i];
...
}
你的第二个不起作用,因为它过早地返回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.
或者只使用in
:
def has23(nums):
return 2 in nums or 3 in nums
答案 1 :(得分:0)
此Java代码可以正常运行:-
public boolean has23(int[] nums) {
if(nums[0]==2||nums[1]==2||nums[0]==3||nums[1]==3){
return true;
}
return false;
}
答案 2 :(得分:0)
使用索引执行上述操作的另一种方法 学习目的的变种
def has23(nums):
try :
alpha = nums.index(2)
return True
except:
try:
beta = nums.index(3)
return True
except:
return False
答案 3 :(得分:0)
旧帖子,我知道,但对于未来的读者:
关于 for 循环,我认为值得一提的是另一个选项:使用 range() 函数。
代替
for i in nums:
您可以将 for 循环切换为如下所示:
for i in range(len(nums)):
这将迭代整数,与其他语言一样。
然后使用 nums[i]
将获得索引的值。
但是,我注意到您的代码及其声明的目标存在另一个问题: 在 for 循环中,所有执行路径都返回一个变量。无论数组的长度如何,它只会执行一次 for 循环,因为在第一次执行后它返回,结束函数的执行。如果第一个值为 false,函数将返回 false。
相反,只有当语句为真时,您才希望在循环内结束执行。如果循环遍历所有可能性并且没有任何错误,则返回 false:
def has23(nums):
for i in range(len(nums)): # iterate over the range of values
if nums[i]==2 or nums[i]==3:# get values via index
return true # return true as soon as a true statement is found
return false # if a true statement is never found, return false
答案 4 :(得分:-1)
def has23(nums):
if nums[0] ==2 or nums[0]==3 or nums[1] ==2 or nums[1]==3:
return True
else:
return False