我得到错误:
>>> sum_digits(123)
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
sum_digits(123)
File "D:/Python/Final/#4.py", line 4, in sum_digits
for i in n:
TypeError: 'int' object is not iterable
>>>
def sum_digits(n):
s = 0
for i in n:
s += n
return s
答案 0 :(得分:2)
您需要将数字转换为str
(不是int
)并重复它:
def sum_digits(n):
s = 0
for i in str(n):
s += int(i)
return s
用法:
>>> sum_digits(123)
6
def sum_digits(n):
return sum(int(i) for i in str(n))
# OR return sum(map(int, str(n)))
答案 1 :(得分:2)
这里的问题是你正在向你的函数传递int
,你无法迭代它。
我建议解决方案
>>> n = 123
>>> sum(int(x) for x in str(n))
6
答案 2 :(得分:0)
如果您希望i
超出n
的位数,则需要以下内容:
for i in [int(x) for x in str(n)]:
或者,你可以将"123"
代替123
传递给sum_digits
,你的帖子标题就是你的意思。当然,那么你需要将每个字符转换为它的数值。
答案 3 :(得分:0)
你不能迭代一个int,但你仍然可以在不转换为str
的情况下进行迭代:
def sum_digits(n):
n, i = divmod(n, 10)
while n:
n, r = divmod(n, 10)
i += r
return i
演示:
In [2]: sum_digits(123456789)
Out[2]: 45
In [3]: sum_digits(123)
Out[3]: 6
In [4]: sum_digits(100)
Out[4]: 1
从int转换为str然后再转换为int没有多大意义。