我是 python 的初学者,正在尝试解决这个问题 input=777 output=7+7+7=21>>2+1=3#till single digit;它进入了无限循环

I am a beginner in python and trying to solve this problem input=777 output=7+7+7=21>>2+1=3#till single digit; it went into infinite loop

def  sum_of_digits(n):
    a = str(n)
    c = 0

    while len(a)>1:
        for i in range(len(a)):
            c+=int(a[i])
        a = str(c)
        #return c
        print(c)            

sum_of_digits(777)

你可以试试这个:

def  sum_of_digits(n):
  if(len(n) == 1):
    return n
  return int(n[0])+int(sum_of_digits(n[1:len(n)]))
    

sum = "00"
param = "0123654789"
while (len(str(sum)) != 1):
  
  sum = sum_of_digits(param)
  param = str(sum)
  
  
  
print(sum)

    

你的程序非常接近你需要的,正如MisterMiyagi所说,在for循环之后立即将c重置为0。它进入无限循环,因为你的“c”只是添加数字和“a”检索那个总是增长的数字...... 在 for 循环之后的 C=0 就可以解决问题

您需要在每次迭代之前或之后重置计数器变量 c。在第一次迭代中,777 变为 7+7+7 = 21,您将其存储在 c 中。然后将 c (即 21 )转换为字符串并存储到 a.

现阶段: c = 21 and a = "21" (String)

之后,您必须设置 c = 0,因为在下一次迭代中,我们将使用 c += int(a[i]) 再次计算 21 的总和,即 2+1=3 .如果您不重置 cc 的先前值将添加到 3 并且值为 21 + 3 = 24(如果我们不设置,我们第一次迭代的 21 c = 0 ) 因此它将永远增加并创建一个无限循环。

def  sum_of_digits(n):
    a = str(n)
    c = 0

    while len(a)>1:
        c = 0
        
        for i in range(len(a)):
            c+=int(a[i])
        a = str(c)
        #return c
        print(c)    
        
    return c
    
    
sum_of_digits(777)