Python

pythonでifの条件にorを使うときの注意

elif, elseまで行かない...

pythonというかプログラミングを初めて数ヶ月,気づくのにかなり時間がかかったので同じようにハマった方の役に立てばと投稿です.

間違った例

    if a == 'hoge' or 'fuga':
        print('coffee')
    else:
        print('tea')

このコードではaに何を代入してもcoffeeと出力され,else:は無視されます.

私が意図した条件はaの値が'hoge'か'fuga'なら'caffee'を出力なんですが,実際pythonではaの値が'hoge'か,もしくは,文字列'huga'が空でないかと解釈されてしまいます.
if文において,条件が文字列のみの場合は,空でなければTrue''という風に空ならFalseになるから,条件1 or '文字列'では常にTrueになるわけですね.なので,

正しい例

    if a == 'hoge' or a == 'fuga':
        print('coffee')
    else:
        print('tea')

たったこれだけです...
これで,ahogefuga以外を代入すると,teaと表示されます.

今回,例ではorを使ってますが,当然,andなどでも同じようなミスで意図しない挙動が起きると思いますのでご注意を!