@runapa

Почему тесты не срабатывают?

Решаю задачу на codewars:
Смысл такой, что надо суммировать все цифры числа, пока число не будет состоять только из одной цифры: 16 -> 1+6 = 7

Тесты:
import codewars_test as test
from solution import digital_root

@test.describe("Sum of Digits / Digital Root")
def fixed_tests():
    @test.it('Basic Test Cases')
    def basic_test_cases():
        test.assert_equals(digital_root(16), 7)
        test.assert_equals(digital_root(942), 6)


А это моя реализация:

def digital_root(n):
    print(n)
    n = [int(x) for x in str(n)]
    n = sum(n)

    if n < 10:
        print(type(n))
        print(n)
        return n
    digital_root(n)


А это вывод сервера:
63a0ce59065d2096235098.png

я в питоне новичок и не догоняю что с моим кодом не так. Можете объяснить?
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Твоя функция, когда доходит до последней рекурсии, возвращает результат вникуда.
Рекурсивный вызов не присваивает то, что вернулось из return.

Можно как-то так:
def digital_root(n):
    n = [int(x) for x in str(n)]
    n = sum(n)
    if n >= 10:
        n = digital_root(n)
    return n
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы