Почему возвращается None, а не список

def price_num(x, num_list=[]):
    if x == 1:
        return num_list
    else:
        for i in range(2, x // 2 + 1):
            if x % i == 0:
                break
        else:
            num_list.append(x)
        price_num(x-1, num_list)

print(price_num(10))

Если выводить список num_list в самой функции, то выводится нужный список.


Ответы (1 шт):

Автор решения: nyekitka

Потому что ваша функция ничего не возвращает по итогу. Что происходит: сначала в список добавляются рекурсивно числа 7, 5, 3, 2. Как только дело доходит до единицы, то вы возвращаете список, но этот возврат происходит в price_num(2, num_list), а дальше вы выходите из рекурсии без всяких возвратов, поэтому правильно будет писать так:

def price_num(x, num_list=[]):
    if x == 1:
        return num_list
    else:
        for i in range(2, x // 2 + 1):
            if x % i == 0:
                break
        else:
            num_list.append(x)
        return price_num(x-1, num_list)

print(price_num(10))

Небольшое замечание: правильнее функцию назвать prime_num.

→ Ссылка