你的問題牽涉到兩個資訊科系要學的學科:集合論、演算法。
就數學觀點來說,邏輯推演會從最大集合開始,逐步排除不符條件的子集。這是【集合論】要學的。
所以你會看到幾乎所有例子都是從 %4 開始推算,因為符合 %4=0 的集合,會比符合 %100=0 的集合來得大。
當然你也可以把符合條件的子集,一個一個加總起來。只是這個思維較容易遺漏。
而且化為電腦程式時,還要考慮一個問題:哪一種方式,效率比較好。這是【演算法】要學的。
也就是因為符合 %4=0 的集合,會比符合 %100=0 的集合來得大,就機率上來看,%4=0 會比 %100=0 更早結束這個閏年判斷,所以效率比較好。也就會把這個判斷擺在前面。
import calendar as cal
def isLeapYear(n):
year = int(n)
return (year % 400 == 0) or ((year % 100 != 0) and (year % 4 == 0))
ylist = [2000, 1999, 2001, 2004, 1900]
xlist = [(x, isLeapYear(x)) for x in ylist]
xlist2 = [(x, cal.isleap(x)) for x in ylist]
print(xlist == xlist2)
ylist = [y for y in range(1,3000)]
xlist = [(x, isLeapYear(x)) for x in ylist]
xlist2 = [(x, cal.isleap(x)) for x in ylist]
print(xlist == xlist2)
你也可以把你寫的函數,一起檢查驗證.
提出一個很有趣的討論呢
簡單來說 如果你想要大海撈針
找到一萬個人裡面符合條件為:「會背26個字母 也會7000單 然後多益900 能演莎士比亞」
最好的篩選法
不是列出「符合所有條件」的人
而是第一關就問:你會不會背出26字母? 不會就直接踢掉 下一個人了
下一關又問7000單能不能背出來 又可以刷掉一批人
以上為個人想法提供參考:))