用于获取整数中每个数字之和的python代码工作不正常

用于获取整数中每个数字之和的python代码工作不正常,python,Python,一个简单的python代码,用于获取n整数中每个数字的和。我尝试了一段时间来获取数字的数量,并通过for循环来获取总和。有时它会起作用。但有时它会少给一个。比如22222应该是10。但是我得了9分 导入数学 def number_adder(): number=int(输入('输入自然数:',)#输入用户值。特别是一个自然数 总和=0 数字的数量=0 对于str中的数字(数字): _位数+=1#获取输入值中的位数 数字=数字*10**(-数字+1) 总和+=数学楼层(数字) 数字-=数学楼层(数

一个简单的python代码,用于获取n整数中每个数字的和。我尝试了一段时间来获取数字的数量,并通过for循环来获取总和。有时它会起作用。但有时它会少给一个。比如22222应该是10。但是我得了9分

导入数学
def number_adder():
number=int(输入('输入自然数:',)#输入用户值。特别是一个自然数
总和=0
数字的数量=0
对于str中的数字(数字):
_位数+=1#获取输入值中的位数
数字=数字*10**(-数字+1)
总和+=数学楼层(数字)
数字-=数学楼层(数字)
对于范围内的数字(数字中的数字-1):
数字=数字*10
总和+=数学楼层(数字)
数字-=数学楼层(数字)
打印('值的所有数字之和为',和)
数字加法器()
你把这条路弄得太复杂了

只要做:

>>> n=22222
>>> sum(int(x) for x in str(n))
10

说明:

sum(int(x) for x in str(n))
                     ^  turn the number into a string
                     ^  strings are iterable character by character  
     ^       ^       ^  a comprehension loop to loop over those 
     ^       ^       ^  characters
               ^        each character assigned to x
      ^                 turn x back into a integer 
 ^                      sum all those digits together
下面是一个不太简洁的例子:

n=123456
total=0
for ch in str(n):
    print(f'{ch:>3}')
    total+=int(ch)
    
print(f'===\n{total:>3}')
印刷品:

  1
  2
  3
  4
  5
  6
===
 21

通过使用
map()
函数,您可以更简洁地执行此操作,在本例中,该函数将
int
函数应用于每个数字的每个字符串表示形式,然后每个
int
数字由
sum()
函数求和

Sidenote:请不要将
sum
用作变量名,因为它是一个内置函数,并且您正在隐藏它

def number_adder():
    #Inputs user value. Specifically a natural number
    number = int(input('Enter a natural number: '))
    num_sum  = sum(map(int, str(number)))
    print('The sum of all digits of the value is', num_sum)

number_adder()
输出(输入
22222
):

问题
def number_adder():
# [...]
总和+=数学楼层(数字)
数字-=数学楼层(数字)
打印(数字)
#印刷品:0.2221999999995
# [...]
我添加了一个
print
语句来检查
number
的值,并给出了
22222
输入,此时
number
的输出是:
0.22219999999995
。这是因为
Python
不会以无限精度执行浮点运算,因此对于给定的
sum
number
减法,这是它能得到的最精确的值。 (检查和作为示例)

自然地,当循环通过
数字的
小数时,会发生以下情况:

用于范围内的数字(数字中的数字-1):
数字=数字*10
总和+=数学楼层(数字)
数字-=数学楼层(数字)

sum(int(x)表示str(n)中的x))
并且不要使用
sum
作为变量的名称。当你在str(number)中对digit进行迭代时,你踩了函数
sum()
,然后你找到了不需要的位数,你可以只做
len(number)
,如果你迭代
str(number)
只需添加
int(digit)
对于某个变量,这就是您的答案。这是否回答了您的问题?但我想知道是什么困扰着我的代码。为什么我真的不明白这是怎么回答这个问题的。。。显然有很多方法可以做到这一点,OP会问他们的方法有什么问题。。。
def number_adder():
    #Inputs user value. Specifically a natural number
    number = int(input('Enter a natural number: '))
    num_sum  = sum(map(int, str(number)))
    print('The sum of all digits of the value is', num_sum)

number_adder()
Enter a natural number: 22222
The sum of all digits of the value is 10
0.2221999...5 <-- Adds a 2
0.221999...5 <-- Adds a 2
0.21999...5 <-- Adds a 2
0.19999...5 <-- Adds a 1