将来のためのヒント:自分がコンピュータであるかのように、非常に詳細にコードを考えてみてください。たとえば、私は文字通り自分自身と次のような会話をします。
うーん、 の場合day = 'Saturday'
、コードは返さFalse
れるべきではないと思いますが返されます。行ごとに何が起こっているか見てみましょう。
def weekend(day):
day
よし、今から良さそう 気がついたら差し替えよう'Saturday'
…
if day != 'Saturday' or day != 'Sunday':
- わかりましたので、これを精神的に に翻訳し
if 'Saturday' != 'Saturday' or 'Saturday' != 'Sunday':
ます。
- ここで、比較を評価して単純化します。
'Saturday' != 'Saturday'
になるFalse
'Saturday' != 'Sunday':
になるTrue
- それらを差し込むと、
if
ステートメントが とif False or True
同じであると言っていることがわかりif True
ます。つまりday = Saturday
、 の戻り値につながりますFalse
。
day = 'Saturday'
ああ、これでケースの何が問題だったのかわかりました。day != 'Sunday'
条件は、 が にif
評価されたことを意味しTrue
ます。
したがって、以下のコードはTrue
forを返しますがday = 'Saturday'
、
def weekend(day):
if day != 'Saturday':
return False
else:
return True
このコードはday = 'Sunday'
、
def weekend(day):
if day != 'Sunday':
return False
else:
return True
2 つを と組み合わせることはできませんor
。
したがって、将来はそのように自分自身に話しかけてみてください。これは、特に紛らわしいブール論理がある場合に、デバッグに非常に役立ちます。
return day.lower() in ['saturday','sunday']
(記録として、これがこれにアプローチする最良の方法だと思います。)