我制作了一个代码来拆分一个整数并单独添加它们,但在某些情况下总和是错误的例如,555 的预期输出为 15,但它显示 16
def find_sum_of_digits(number):
sum_of_digits=0
sum=0
var=0
#Write your logic here
while number>0:
var = number%10
sum += var
number = number/10
sum_of_digits=sum
return int(sum_of_digits)
#Provide different values for number and test your program
sum_of_digits=find_sum_of_digits(123)
print("Sum of digits:",sum_of_digits)
我想要的输出是将 123 加以显示 6,反之亦然以显示其他整数值
跟踪值的简单print
将显示问题:
number = number/10
您需要整数除法:
number = number//10
您的代码计算无限总和,然后必须除以 10,直到内部表示的剩余数字减少到 0。
执行此操作的一种更简单的方法是获取原始字符串输入并将字符串的每个字符转换为个位数整数。 添加这些整数。
你也可以这样做:
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
另一种解决方案是:
def find_sum_of_digits(number):
return sum([int(n) for n in str(number)])
下面是一个解决方案,它使用原始问题中提供的示例作为起点。
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
请注意,当number
除以 10 向左移动到下一个数字时,使用楼层除法运算符 (//
) 而不是标准除法运算符 (/
)。正是此更改将阻止您获得错误的return
值(例如16
而不是15
时number = 555
)。
Python floor 除法返回一个表示两个数字的截断除法的int
;而不是float
(如 Python 中的标准除法),这是您的目的所必需的,因为您只关心number
的int
位数字,而不关心标准除法可能产生的任何小数部分 - 这些是在原始示例中转换回int
之前求和的。
这是产生所需输出的另一个有效解决方案。这次我们返回sum
函数的结果,该函数给出了一个列表理解,其中包含代表number
每个数字的int
个实例。
def find_sum_of_digits(number):
return sum([int(d) for d in str(number)])
在这种情况下,表示number
每个数字的int
是通过首先将number
转换为str
,然后遍历number
str
的每个char
,将每个int
转换回一个来找到的。