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