2016-06-10 102 views
-4
def eoo(a): 
    if a%2 == 0: 
    print("Entered value is even") 
    else: 
    print("Entered value is odd") 
b = 5556.4 
print(b) 
eoo(b) 

输出是为什么执行会产生错误的输出?

5556.4 
Entered value is odd 

谁能解释?

+0

你期望'a%2'做什么? – melpomene

+0

检查'5556.4%2'的值,你会发现它不等于零。 – glibdud

+1

'5556.4%2'是'0.4'。诸如“偶数”和“奇数”等类别对于十进制数并没有真正的意义。来自[Wikipedia](https://en.wikipedia.org/wiki/Parity_(mathematics)):“偶数的正式定义是它是一个n = 2k形式的整数,其中k是一个整数” –

回答

0

输出没有错。 5556.4 % 2不为零,因此您在else情况下得到:

>>> 5556.4 % 2 
0.3999999999996362 

这是你的假设,即任何数量甚至不是必须是奇数,这是错误。事实上,“偶数”和“奇数”等类别对于十进制数并没有太大的意义。从Wikipedia(重点煤矿)

奇偶校验是描述在两个类别中的一个的整数的夹杂物的性质的数学术语:偶数或奇数。 [...]的偶数个的正式定义是,它的形式为N = 2K,其中ķ整数整数

取而代之的是,你可以,例如,你的方法改变这样的事情:

def eoo(a): 
    if a % 2 == 0: 
     print("Entered value is even") 
    elif a % 2 == 1: 
     print("Entered value is odd") 
    else: 
     print("Entered value is neither even nor odd") 

或者,如果你只对数量的整数部分感兴趣,使用int(a) % 2,或round(a) % 2检查四舍五入到最接近的整数是偶数还是奇数。

0

当您将a除以2时,%2会给您余数。当您将5556.4除以2时,您的余数不为0,即为0.4。这就是为什么你要去你的其他条件。

相关问题