2016-06-10 98 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。這就是爲什麼你要去你的其他條件。

相關問題