if文の説明(公式)
if 文は、式を一つ一つ評価してゆき、真になるまで続けて、真になった節のスイートだけを選択します
if文の問題
if []:
print('「正解です」')
else:
print('「不正解です」')
# 「不正解です」
※空のシーケンスまたはコレクション: ** ‘’, (), [], {}, set(), range(0) は Falseと判断されます。
trick = False
treat = False
if not (trick or treat): # 真ではない
print('Hmmm')
elif trick and not treat:
print('Yuck!')
elif not trick and treat:
print('Yay!')
else:
print('What?')
# Hmmm
・if 文では not が入っているため、 trick は True という扱いになります。
また、treat も判断の対象ですが or で判断しているので、trick が True であれば真と判断され
「Hmmm」が出力されます。
● 解説
最初の行では、trick と treat の初期値がともに False に設定されています。
条件文では、not (trick or treat) という条件式が評価されます。
この条件式は、trick または treat のいずれかが True でない場合に真となります。
もし条件式が真であれば、print('Hmmm') というメッセージが表示されます。
つまり、trick と treat のどちらも False の場合に 'Hmmm' というメッセージが表示されます。
次に、elif trick and not treat: の条件式が評価されます。
これは、trick が True であり、treat が False の場合に真となります。
もし条件式が真であれば、print('Yuck!') というメッセージが表示されます。
つまり、trick が True であり、treat が False の場合に 'Yuck!' というメッセージが表示されます。
次に、elif not trick and treat: の条件式が評価されます。
これは、trick が False であり、treat が True の場合に真となります。
もし条件式が真であれば、print('Yay!') というメッセージが表示されます。
つまり、trick が False であり、treat が True の場合に 'Yay!' というメッセージが表示されます。
最後の else ブロックでは、どの条件も真ではない場合に実行されます。
つまり、trick と treat のいずれも True ではなく、かつどちらも False でもない場合に
'What?' というメッセージが表示されます。
lst = [0,1,1,2,3,5,8,13]
n = 13
if lst[n % 5] > 2: # lst[]はリスト!!
print(lst[n // 5])
else:
print(lst[n // 5] - 1)
# 0
・n%5 は 13%5 の結果です。余りなので 3 です。
lst[3] は前から 4 番目の 2 です。if 文の条件、2>2 は満たされないので else に流れます。
else の出力ですが、n//5 は 13//5 です。これは切り捨て除算なので解は 2 になります。
lst[2] は 1 です。1 - 1 はゼロですので、ゼロが正解になります。