#python
#python
Вопрос:
Я хочу взять число и вывести сумму его цифр, и если сумма больше 10, то снова просуммируйте эти цифры (и так далее).
Example: 621
6 2 1=9
print 9
Example:743
7 4 3=14
1 4=5
print 5
Это то, что у меня есть на данный момент:
num=int(input("what's the number?"))
def oneNum(num):
numLen=len(str(num))
tot=0
if num>=10:
for i in range(numLen):
i=i 1
tot=num%10 tot
print(tot)
num=num//10
if tot>=10:
num=tot
oneNum(num)
else:
return(tot)
print(tot)
Комментарии:
1. Вы определили функцию с именем oneNum, однако вы никогда не вызываете функцию. Вы должны вызвать его, чтобы заставить его выполнить работу.
2. Также вы не возвращаете в рекурсивном случае.
Ответ №1:
Это называется «цифровым корнем» числа — возьмите сумму цифр, и если это число больше или равно 10, продолжайте делать это, пока не станет достаточно маленьким.
Обычно я бы исправил ваш код, но поскольку я только вчера написал подобный метод, я просто вставлю его сюда:
def digital_root(num):
root = sum(int(d) for d in str(num))
while root >= 10:
root = sum(int(d) for d in str(root))
return root
Как вы можете видеть, самый простой способ сделать это — преобразовать целое число в строку и выполнить итерацию по каждому символу, превратив его обратно в однозначное число, и сложить их все.
Вот рекурсивная версия (хотя из-за накладных расходов на вызов функции она на самом деле была бы немного менее эффективной):
def digital_root(num):
root = sum(int(d) for d in str(num))
return root if root < 10 else digital_root(root)