Python:空输出而不是正确的值

时间:2015-08-22 14:36:43

标签: python

我正在尝试编写一个函数来重复添加给定数字的数字,直到我有一个数字。

所以addDigits(345)= 12,1 + 2 = 3,所以这应该返回3

这是我的尝试:

class Solution(object):
    def addDigits(self, num):
        """
        :type num: int
        :rtype: int
        """
        if (num >= 0 and num < 10):
            return num
        else:
            total = 0
            while (num >= 10):
                total += (num % 10)
                num /= 10
            total += num
            self.addDigits(total)

在输入10上,我得到了null,我不知道为什么。我已经跟踪了代码,它看起来对我来说......

2 个答案:

答案 0 :(得分:2)

旧技术&#34;铸造9&#34;给出了快速回答

def sumOfDigits(x):
    if x == 0: return 0 
    y = x % 9
    return 9 if y == 0 else y

一个例子说明了为什么会这样:

433 = 4 *(99 + 1)+ 3 *(9 + 1)+2 = 4 * 99 + 3 * 9 +(4 + 3 + 3)

还原模9给出(4 + 3 + 3)(mod 9)

正如安德里亚在下面的评论指出的那样,当数字的总和与9一致时,这给出了错误的答案。

答案 1 :(得分:1)

以下是一种将您的号码拆分为单个数字的方法,并将它们连续求和,直到您得到一位数字。

total = 12348736

while len(str(total)) > 1:
    total = sum(map(int,str(total)))

print total

编辑:只是进一步解释:

  • str(12348736):将您的号码变成字符串
  • map(int, '12348736'): 将您的字符串(字符列表)转换为整数列表(将int应用于每个字符)
  • sum([1, 2, 3, 4, 8, 7, 3, 6]):加起来 列表中的所有数字