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

时间:2019-02-19 11:09:27

标签: python python-3.x

我正在尝试定义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。为什么会这样?

3 个答案:

答案 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

让我们逐步使用该功能

  1.   

    for i in range(0,len(num)-1)

    i初始化为0,即i = 0

  2.   

    nums[i:i+2]

    由于i0,因此成为nums[0:2],即[nums[0], nums[1]]

  3.   

    if num[i:i+2] == [3,3]

    成为if num[0:2] == [3,3]。由于nums[0] = 1nums[1] = 2[nums[0], nums[1]] != [3,3]。因此,if块将不会执行。

  4. 由于return False处于for循环中,并且不满足if条件,因此将执行下一行,即return False。函数执行到此为止。

现在,第二个功能:

nums = [1,2,3,3,5]

has_33(nums)
True

一步一步

  1. 与我的功能相同。
  2. 与我的功能相同。
  3. 与我的功能相同。
  4. 现在是要抓住的地方。由于return False写在for循环之外,所以i增加了1i = 1
  5. nums[i:i+2]nums[1:3],即[nums[1], nums[2]]
  6. 循环继续进行,直到您获得[3,3]i = len(nums) - 1

希望这可以帮助您了解问题所在。