4 回答
![?](http://img1.sycdn.imooc.com/5458683f00017bab02200220-100-100.jpg)
TA贡献2019条经验 获得超9个赞
一个简单的print
跟踪你的值就会显示问题:
number = number/10
您需要整数除法:
number = number//10
您的代码计算无限总和,然后必须除以 10,直到内部表示的剩余数字减少到 0。
一种更简单的方法是获取原始字符串输入并将字符串的每个字符转换为一位整数。添加这些整数。
![?](http://img1.sycdn.imooc.com/5458478b0001f01502200220-100-100.jpg)
TA贡献1804条经验 获得超2个赞
您还可以这样做:
number = int(input("Enter the Number: "))
sum_of_digits = 0
while number > 0:
digit = number % 10
sum_of_digits = sum_of_digits + digit
number = number // 10
![?](http://img1.sycdn.imooc.com/56fb3e3d0001a10301000100-100-100.jpg)
TA贡献1836条经验 获得超5个赞
下面是一个使用原始问题中提供的示例作为起点的解决方案。
def find_sum_of_digits(number):
result = 0 # Variable to store result
while number > 0:
digit = number % 10 # Current digit is remainder from number / 10
result += digit # Add digit to result and assign value to result variable
number //= 10 # Number is number // 10 to shift left to next digit, disregarding fractional part of quotient
return result
请注意,除以 10 向左移到下一位时,使用了下限除法运算符( //
) 而不是标准除法运算符 ( /
) 。number
正是这种更改将阻止您获得错误的return
值(例如16
代替15
when number = 555
)。
Python 向下除法返回int
表示两个数字的截断除法;而不是 a float
(如 Python 中的标准除法那样),这对于您的目的来说是必需的,因为您只关心 的数字int
,而不关心标准除法可能产生的任何小数部分 - 这些在number
您转换回之前会被求和int
原始示例。
这是另一个有效的解决方案,可以产生所需的输出。这次我们返回sum
函数的结果,该结果给出了int
表示 的每个数字的实例的列表理解number
。
def find_sum_of_digits(number): return sum([int(d) for d in str(number)])
在这种情况下,通过首先转换为 a ,然后迭代每个,将每个int
数字转换回 ,找到表示 的每个数字。number
number
str
char
number
str
int
![?](http://img1.sycdn.imooc.com/545845d30001ee8a02200220-100-100.jpg)
TA贡献1784条经验 获得超8个赞
另一种解决方案是:
def find_sum_of_digits(number): return sum([int(n) for n in str(number)])
添加回答
举报