【问题标题】:recursive function, get list of multiples递归函数,获取倍数列表
【发布时间】:2021-05-09 10:49:40
【问题描述】:

问题:编写一个名为 get_list_of_multiples(numbers, m) 的递归函数,它接受一个整数列表和一个整数作为参数。此函数以与给定参数相同的顺序返回列表中 m 的倍数的列表。如果列表中没有 m 的倍数,该函数应该返回一个空列表。

大家好,我的代码有问题:

def get_list_of_multiples(numbers, m):

    if len(numbers) > 1:
        if(numbers[0] % m == 0):
            return [numbers[0]] + get_list_of_multiples(numbers[1:], m)
        return get_list_of_multiples(numbers[1:], m)
    if(numbers[0] % m == 0):
        return [numbers[0]]
    else:
        return []

测试用例是:

print(get_list_of_multiples([2, 3, 5, 6], 2))
print(get_list_of_multiples([9, 5, 15, 11, 23], 3))
print(get_list_of_multiples([], 2))

前两个测试用例很好,但对于最后一个为空的测试用例,假设返回一个空列表,但它不断出现错误,说列表索引超出范围。我在代码中修改了什么以使其工作?谢谢

【问题讨论】:

    标签: python


    【解决方案1】:

    尝试将您的代码更改为:

    def get_list_of_multiples(numbers, m):
    
        if len(numbers) > 1:
            if(numbers[0] % m == 0):
                return [numbers[0]] + get_list_of_multiples(numbers[1:], m)
            return get_list_of_multiples(numbers[1:], m)
        elif len(numbers) == 0:
            return []
        elif (numbers[0] % m == 0):
            return [numbers[0]]
        else:    
            return []
    

    您得到IndexError 的原因是因为numbers[0] % m == 0 这一行。如果列表的长度是0,你仍然检查列表的第0个元素是否可以被m整除,但是如果它是一个空列表,则没有第0个元素。

    在更新的代码中,首先检查列表的长度是否为0,如果是,则返回一个空列表,如果不是,则检查第0个元素是否可整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 2016-09-01
      • 2019-05-05
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      相关资源
      最近更新 更多