【问题标题】:Python summing digits in number ,'n'Python对数字中的数字求和,'n'
【发布时间】:2016-12-18 15:42:40
【问题描述】:

我是一名新手程序员,偶然发现了 codecademy 中使用 python 的问题。 我得到一个随机正整数 n,需要隔离数字以将它们加在一起并将总和添加到变量中,总计

这是我目前的代码,记住我是新手!:)

def digit_sum(n):
    total = 0
    while len(str(n)) > 0:
        total = total + n%10
        n -= n//10

【问题讨论】:

  • 无限循环?甚至 '0' 的长度为 1。

标签: python sum int iteration


【解决方案1】:

您的代码中存在三个问题:

  • 函数不返回值。在末尾添加return total
  • len(str(n)) > 0 时,您不应该继续,因为这将永远是正确的:任何转换为​​字符串的数字都至少有一个字符。相反,只需验证n > 0
  • n不应该用减法调整,而是用除法调整:n //= 10

所以这里是更正的代码:

def digit_sum(n):
    total = 0
    while n > 0:
        total = total + n%10
        n //= 10
    return total

不是问题,但您可以将total = total + n%10 缩短为total += n%10

【讨论】:

  • 好的,我明白了,非常感谢。减法的数学是错误的,我也学到了关于字符串的新东西:)
【解决方案2】:

所以,这里的问题是你的循环没有终止(我可以很容易地自己在这里弄清楚,但总的来说,请在你的问题中说明问题是什么)。

让我们尝试使用打印来调试它:

def digit_sum(n):
    total = 0
    while len(str(n)) > 0:
        print(n)
        total = total + n%10
        n -= n//10

当我用一些参数调用它时,我会在控制台中无限期地收到很多 9。那是因为9//100,因为它截断了除法的结果。

实际上,您尝试使用的数学是不正确的。您不想将n 的十分之一减去n,因为那样会得到n 的十分之九。 你要的是占n的十分之一。

所以,这样做:n = n//10 而不是这个:n -= n//10

【讨论】:

    【解决方案3】:

    每次迭代都应该处理一个数字。最简单的方法是在每次迭代中将其除以 10:

    def digit_sum(n):
        total = 0
        while n > 0:
            total += (n % 10)
            n //= 10
        return total
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 2019-09-24
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多