我想将整数拆分为单个元素并添加元素



我制作了一个代码来拆分一个整数并单独添加它们,但在某些情况下总和是错误的例如,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而不是15number = 555)。

Python floor 除法返回一个表示两个数字的截断除法的int;而不是float(如 Python 中的标准除法),这是您的目的所必需的,因为您只关心numberint位数字,而不关心标准除法可能产生的任何小数部分 - 这些是在原始示例中转换回int之前求和的。

这是产生所需输出的另一个有效解决方案。这次我们返回sum函数的结果,该函数给出了一个列表理解,其中包含代表number每个数字的int个实例。

def find_sum_of_digits(number):
return sum([int(d) for d in str(number)])

在这种情况下,表示number每个数字的int是通过首先将number转换为str,然后遍历numberstr的每个char,将每个int转换回一个来找到的。

最新更新