Python Expressive Puzzlers 1: Oddity

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

Python Puzzlers 系列文章皆參考"Java Puzzlers: Traps, Pitfalls, and Corner Cases"一書的內容,轉到 Python 語言中並看看這些陷阱會不會發生。

謎題一:判斷奇數
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
public class Oddity {

public static boolean isOdd(int i) {

return i % 2 == 1;

}



public static void main(String[] args) {

        for(int i = -3; i <= 3; i++)

            System.out.println(i + ":" + Oddity.isOdd(i));

}

}



x

此書提到在 java 中,上述的程式碼有1/4的機率會不對,為什麼呢?原因是負奇數 % 2 會得到 -1。例如 -5 % 2 = -1 而 -1 == 1 不成立。那在Python中呢?請執行底下程式就知道結果了:
1
2
3
4
5
6
def isOdd(n):
  print( n%2 )
  return n % 2 == 1
for i in range(-5, 5):
  print(i)
  print(isOdd(i))

沒有留言: