我正在尝试定义2个函数,但是只有has_33
在起作用,而myfunction
在不起作用。
我正在jupyter笔记本中尝试以下代码:
def myfunction(num):
for i in range(0, len(num)-1):
if num[i:i+2] == [3,3]:
return True
return False
和此代码:
def has_33(nums):
for i in range(0, len(nums)-1):
if nums[i:i+2] == [3,3]:
return True
return False
myfunction([1,2,4,3,3])
应该为true,但是给出错误的结果,但是has_33([1,2,4,3,3])
是为true。为什么会这样?
答案 0 :(得分:0)
嗨,两个代码都有缩进: 在第一个函数中,第二个返回在for循环内,而在第二个函数中,它在for循环外:
因此在第一个函数中,如果条件为false且正在第二次返回并为第一个值0返回false
在第二个函数中,如果求值保持假,直到i为3,并且for循环未执行return。一旦对i = 0的求值变为true,它将执行if的返回并返回true,因此控制权消失,并且for的第二次返回权未被执行:
更正了第一个功能:
def myfunction(num):
for i in range(0,len(num)-1):
if num[i:i+2] == [3,3]:
return True
return False
答案 1 :(得分:0)
缩进错误!只需要从第一个代码的最后一行中删除空格。 for循环现在将返回False。尝试这样:
def myfunction(num):
for i in range(0,len(num)-1):
if num[i:i+2] == [3,3]:
return True
return False
答案 2 :(得分:0)
按照@quamrana的建议将我的评论发布为答案。
此行为是由于缩进。在myfunction
中,如果不满足条件nums[0:2] == [3,3]
,则该函数立即返回False
。而在has_33
中,它会遍历整个列表,然后如果没有连续的False
,则只会返回[3,3]
。
例如
nums = [1,2,3,3,5]
myfunction(nums)
False
for i in range(0,len(num)-1)
i
初始化为0
,即i = 0
。
nums[i:i+2]
由于i
为0
,因此成为nums[0:2]
,即[nums[0], nums[1]]
。
if num[i:i+2] == [3,3]
成为if num[0:2] == [3,3]
。由于nums[0] = 1
和nums[1] = 2
,[nums[0], nums[1]] != [3,3]
。因此,if
块将不会执行。
return False
处于for
循环中,并且不满足if
条件,因此将执行下一行,即return False
。函数执行到此为止。现在,第二个功能:
nums = [1,2,3,3,5]
has_33(nums)
True
return False
写在for
循环之外,所以i
增加了1
。
i = 1
nums[i:i+2]
是nums[1:3]
,即[nums[1], nums[2]]
。[3,3]
或i = len(nums) - 1
。希望这可以帮助您了解问题所在。