я сталкиваюсь со странной проблемой:Создание функции цифрового корня
цифровой корневой функцией является то, что выглядит следующим образом:
digital_root(493193)
=> 4 + 9 + 3 + 1 + 9 + 3
=> 29 ...
=> 2 + 9
=> 11 ...
=> 1 + 1
=> 2
и мой ответ:
def digital_root(n):
k = 10
while k > 9:
k = reduce(lambda x,y: int(x)+int(y), list(str(n)))
return k
I положим к до 10, так что он будет напрямую входить в цикл. Но судья онлайн говорит, что это стоит слишком много времени.
и Стараюсь другое решение:
def digital_root(n):
while n > 9:
n = reduce(lambda x,y: int(x)+int(y), list(str(n)))
return n
, то проблема решена. Я могу понять, в чем разница между этими двумя кодами.
Кстати, я использую онлайн-судьи.
Возможно, все еще может быть быстрее. http://stackoverflow.com/questions/14939953/sum-the-digits-of-a-number-python –
Да, преобразование в строку, вероятно, не самое лучшее, что можно сделать со всеми преобразованиями назад и вперед, я мог бы подумал о том, что ... –
Спасибо всем, на самом деле это быстрее ' защиту digital_root (п): возвращение п% 9 или п и 9 ' Я видел этот код на codewars, очень умный! – SoulerTsai