【问题标题】:While True loop doesn't break after calling return虽然调用 return 后 True 循环不会中断
【发布时间】: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


【解决方案1】:

您应该在每次迭代中更新n 的值,如下所示:

def digital_root(n):
    while True:
        digits = []
        for i in str(n):
            digits.append(int(i))
        n = sum(digits)  # add
        if n < 10:
            return n

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 1970-01-01
    • 2021-07-12
    • 2015-09-14
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2020-03-17
    • 2013-03-25
    相关资源
    最近更新 更多