我是 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
.如果您不重置 c
,c
的先前值将添加到 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)
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
.如果您不重置 c
,c
的先前值将添加到 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)