我无法修复python中的代码问题

我无法修复python中的代码问题,python,python-3.x,Python,Python 3.x,我试图定义两个函数,但只有_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):

我试图定义两个函数,但只有_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,但它给出的结果为false,而has_33[1,2,4,3,3]给出的结果为true。为什么会发生这种情况?

嗨,这两种代码的缩进不同: 在第一个函数中,第二个返回位于for循环内,而在第二个函数中,它位于for循环外:

所以在第一个函数中,当if条件为false时,它将进行第二次返回,并为第一个值0返回false

在第二个函数中,若求值保持false,直到i为3,并且for循环不执行return。一旦i=0上的if求值变为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
nums = [1,2,3,3,5]

has_33(nums)
True

缩进错误!只需要删除第一行代码最后一行的空白。for循环现在将返回False。试着这样做:

def myfunction(num):  
    for i in range(0,len(num)-1):  
        if num[i:i+2] == [3,3]:  
            return True  
    return False  

按照@quamrana的建议,将我的评论作为答案发布

这种行为是因为缩进。在myfunction中,如果不满足条件nums[0:2]==[3,3],则函数立即返回False。而在has_33中,它遍历整个列表,然后只有在没有连续的[3,3]时才会返回False

e、 g

让我们在函数中一步一步地进行 对于0范围内的i,lennum-1

i被初始化为0,即i=0

nums[i:i+2]

因为i是0,所以变成nums[0:2],即[nums[0],nums[1]]

如果num[i:i+2]==[3,3]

如果num[0:2]=[3,3]变为。因为nums[0]=1和nums[1]=2,[nums[0],nums[1]!=[3,3]. 因此,将不执行if块

由于return False位于for循环中,如果条件不满足,则执行下一行,即return False。函数的执行在此停止。 现在,第二个功能:

def myfunction(num):
    for i in range(0,len(num)-1):
        if num[i:i+2] == [3,3]:
            return True
    return False
nums = [1,2,3,3,5]

has_33(nums)
True
一步一步地 与myfunction相同。 与myfunction相同。 与myfunction相同。 现在,问题来了。由于return False写在for循环的外部,所以i增加1。 i=1 nums[i:i+2]是nums[1:3],也就是[nums[1],nums[2]]。 循环将继续,直到得到[3,3]或i=lennums-1。
希望这有助于您了解问题所在。

这是因为缩进。在myfunction中,如果条件num[0:2]==[3,3]不满足,则函数立即返回False。而在has_33中,它遍历整个列表,然后只有在没有连续的[3,3]时才会返回False@AneeshPalsule:也许你可以写下你的评论作为答案。@quamrana写下这篇评论作为答案的问题是,潜在的缩进问题是重复的、令人恶心的,只不过是一个没有意识到这一问题的重要性的人的打字错误typos@JohnColeman:是的,我希望能对这个永恒的问题做点什么。但与此同时,还有另一个用户需要鼓励。@quamrana问题的一部分是,即使这个bug一直出现,也很少有一个好的重复目标,特别是提出问题的人可以合理地期望找到的目标。如果他们知道搜索缩进,那么他们就可以不用问问题就解决自己的问题。