我正在尝试创建一个递归函数,用于添加数字中的所有数字。以下是我的想法:
def sumOfDigits(num):
num=str(num)
if len(num)==0:
return 0
elif len(num)==1:
return int(num)
elif len(num)>1:
return int(num[0]) + int(num[-1]) + int(sumOfDigits(num[1:-1]))
这几乎适用于任何数字:
sumOfDigits(999999999)
>>>81
sumOfDigits(1234)
>>>10
sumOfDigits(111)
>>>3
sumOfDigits(1)
>>>1
sumOfDigits(0)
>>>0
如果数字以'0'开头,会发生奇怪的事情
sumOfDigits(012)
>>>1
sumOfDigits(0123)
>>>11
sumOfDigits(00010)
>>>8
我在这里想念的是什么?
答案 0 :(得分:12)
在Python 2中,以零开头的整数文字是octal 。
举个例子:
In [46]: 012
Out[46]: 10
In [47]: 0123
Out[47]: 83
In [48]: 0010
Out[48]: 8
由于您的功能在十号基础上运行,因此它正确地完成了它的工作。 :)
另外,对于这个问题,你既不需要字符串操作也不需要递归。由于其他人已经提出了非递归解决方案,这里是一个不使用字符串操作的递归解决方案:
def sumOfDigits(n):
return 0 if n == 0 else sumOfDigits(n // 10) + n % 10
答案 1 :(得分:2)
说实话,这是一个更简单的方法来做这件事。
sum(map(int, str(num)))
请注意,这并不能解决上面明确指出的八进制字符串问题。
答案 2 :(得分:0)
0
的数字统计信息被视为八进制数。
00010
的八进制值为8。
有关详情,请参阅帖子binary numbers?。
以0
开头的Python编号不起作用。对于八进制数,您必须指定Oo
将其转换为八进制数。