Моя программа не показывает результат?она должна показывать сумму своего внутреннего

#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)