Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数字中偶数和奇数之和的差_Python - Fatal编程技术网

Python 数字中偶数和奇数之和的差

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:

我试图找出一个数的偶数和奇数之和之间的差异。我的代码只适用于一种情况,即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:
                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行(返回偶数-奇数)后起作用。谢谢