рекурсивная функция, получить список кратных

#python

Вопрос:

вопрос : Напишите рекурсивную функцию с именем get_list_of_multiples(числа, 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))
 

первые два тестовых случая хороши, но для последнего тестового случая, когда он пуст, предполагается, что он возвращает пустой список, но он продолжает выдавать ошибку, указывающую, что индекс списка находится вне диапазона. что мне нужно изменить в коде, чтобы он работал? Спасибо

Ответ №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-й элемент или нет.