【发布时间】:2022-01-25 15:22:33
【问题描述】:
我正在尝试编写一个函数,该函数将接受一个整数,将其分成数位,将它们相加,如果总和 >=10,则循环整个过程,直到我得到一个个位数的总和。谁能告诉我为什么我的“while True”循环没有中断:
def digital_root(n):
while True:
digits = []
for i in str(n):
digits.append(int(i))
if sum(digits) < 10:
return sum(digits)
我并不是真的在寻找最佳解决方案,我只是想知道为什么这不起作用。
【问题讨论】:
-
digits 每次循环都会重置。你每次都做同样的事情。
-
您不会在任何地方更新
n,因此如果数字总和>= 10,它每次都会重复相同的循环。下一次迭代从一个空列表开始,str(n)仍然是原始数字,而不是您之前迭代的结果 -
我看到我每次都重置了数字列表,但我的问题是:如果我的 n 是 16,它将被划分为 1+6 = 7。这意味着它应该只循环一次并且打破我的回报声明。但由于某种原因它没有?
-
你试过运行 n=16 吗?这对我来说很好,因为它不需要循环超过一次迭代。问题在于不直接具有总和
-
感谢您的 cmets。看来我是这里的罪魁祸首。 16确实有效。由于这个问题有几个测试(第一个是当 n=16 时),我假设我的函数不起作用,因为我得到了超时错误。我没有意识到它在其他测试中超时,因此没有记录第一个测试成功的事实。
标签: python algorithm function while-loop