> ・100の倍数ならば、4の倍数である
> ・400の倍数ならば、100の倍数である

↑の性質に拠らない書き方でisLeapYearを書き直すとこんな感じ?↓

def isLeapYear(year):
 if year % 400 == 0:
  if year % 100 == 0:
   if year % 4 == 0: return True
 if year % 100 == 0:
  if year % 4 == 0: return False
 if year % 4 == 0: return True
 return False

なんか、仕様の下のほうからコード化すると読んでて気持ち悪いですね。素直に

def isLeapYear(year):
 if year % 4 == 0:
  if year % 100 != 0: return True
 if year % 4 == 0:
  if year % 100 == 0:
   if year % 400 == 0: return True
 return False

こんなんで良いんじゃないの?

> それ、問題文の条件のまま書いちゃダメなんですよね。
> 「ただし」がある場合は前出の条件を否定してくるので、条件の順番通りに書くと破綻します。
> だから、「ただし」がある場合は条件を逆に記述していくのが鉄則です。

あっ! 馬鹿なんだね。これは失礼した。