Python 数字中偶数和奇数之和的差
我试图找出一个数的偶数和奇数之和之间的差异。我的代码只适用于一种情况,即412,但不适用于23和1203等数字。 我不知道为什么。这是我的密码Python 数字中偶数和奇数之和的差,python,Python,我试图找出一个数的偶数和奇数之和之间的差异。我的代码只适用于一种情况,即412,但不适用于23和1203等数字。 我不知道为什么。这是我的密码 def digitS(n): even = 0 odd = 0 while (n!=0): for i in range(n): if i % 2 == 0: even = even + (n%10) else:
def digitS(n):
even = 0
odd = 0
while (n!=0):
for i in range(n):
if i % 2 == 0:
even = even + (n%10)
else:
odd = odd + (n%10)
n//=10
return even - odd
n = 412
print(digitS(n))
我对下面的代码做了一些编辑。您所尝试的是完全正确的,但是for循环是一个障碍,应该被移除。另外,据我所知,你想要奇数和偶数之和之间的差异。为此,必须返回
奇偶的绝对值
def数字(n):
偶数=0
奇数=0
而(n!=0):
如果n%2==0:
偶数+=(n%10)
其他:
奇数+=(n%10)
n/=10
返回abs(奇偶)
打印(数字(412))#5
打印(数字(23))#1
只需放弃循环即可
def digitS(n):
even = 0
odd = 0
while (n!=0):
if n % 2 == 0:
even += (n%10)
else:
odd += (n%10)
n//=10
return even - odd
n = 412
print(digitS(n))
我认为第5行中的
不需要,因为您只想迭代数字,而不是整个数字范围。例如,如果数字是1203,你想检查1,2,0和3,而不是0,1,2,3。。。1201, 1202. 另外,检查数字已经在中处理,而(n!=0):n/=10
,因此不需要for
。将输入转换为字符串,逐个迭代元素,通过将它们转换为整数等方式检查它们是否为奇数或偶数
def digit(n):
even = 0
odd = 0
string = str(n)
for i in string:
if int(i) % 2 == 0:
even += int(i)
else:
odd += int(i)
return even - odd
n = 282
print(digit(n)) #12
我不确定for循环的作用是什么。但这里有一个你可以做的例子。放弃for循环并遍历每个数字,直到n==0
def数字(n):
偶数=0#偶数之和
奇数=0#奇数之和
而(n!=0):
数字=n%10#获取数字的最右边数字
如果数字%2==0:#检查该数字是偶数还是奇数
偶数=偶数+位数
其他:
奇数=奇数+位数
n/=10#删除数字中的数字
返回奇偶
n=412
打印(数字(n))
我不太清楚,你想找出奇数和偶数之间的差异,或者奇数和偶数位置之间的差异吗
顺便说一句,我假设您要计算前者——您实现后者的代码在设计中存在一些问题
def digit(n):
even = 0
odd = 0
while (n != 0):
r = n % 10
if r % 2 == 0:
even = even + r
else:
odd = odd + r
n //= 10
return even - odd
n = 412
print(digit(int(n)))
还有一个更简洁的回应,借助于字符串
def digit(n):
even = [int(i) if int(i) % 2 == 0 else 0 for i in str(n)]
odd = [int(i) if int(i) % 2 else 0 for i in str(n)]
return sum(even) - sum(odd)
请注意,没有理由需要n
循环-您的步数与数字的步数一样多,而while
循环应该注意这一点。我认为函数名中有输入错误。它应该是数字而不是数字吗?@jane,避免用这么多数学符号使代码复杂化。将整数转换为字符串,对其进行迭代,就会得到结果。这将检查数字是偶数还是奇数,而不仅仅是数字digits@Sandsten不,我正在做与被接受的答案相同的事情,我先发布了我的答案,我还有一个解释……这在缩进第11行(返回偶数-奇数)后起作用。谢谢