本連載では、コードを書く流れに沿ってPython言語の基礎文法を説明してきた。今回は、応用的だが、利用頻度が高く重要な文法として、if条件式とand/or/not論理演算子を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「deepinsider.jp」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
Python言語の文法のうち、応用的だが押さえておいてほしいものをいくつか、具体的には、
の5項目を紹介してから終わりとしたい。これらは、Pythonのサンプルコードを読む際に出くわす可能性が特に高く、しかも知らないと非常に難解そうなコードに思えてしまうものである。そのうち今回は、「if 条件式」と「and/or/not 論理演算子」について説明する。※脚注や図、コードリストの番号は前回からの続き番号としている。
なお、本稿で示すサンプルコードの実行環境については、Lesson 1を一読してほしい。
Lesson 1でも示したように、本連載のすべてのサンプルコードは、下記のリンク先で実行もしくは参照できる。
まずは簡単なものから。Lesson 9では、制御フロー文の一つとしてif文を説明した。これで条件分岐は実現できるわけだが、「1つの文の中でも(式によって)条件分岐することで、コードを短くしたい」というニーズがある。
例を挙げよう。リスト18-1は、前回のLesson 9のリスト12-1の再掲である。
predicted_label = '猫'
true_label = '犬'
# 上の2行は下記コードの実行に必要な仮のコード
if predicted_label == true_label:
color = 'blue'
else:
color = 'red'
color # 'red'と出力される
if文〜else文は配下のブロックを含めて4行となっている。このような書き方はPython言語では(推奨されており)普通であるが、特にC言語派の人にとっては冗長な書き方に感じられることがある。そう考える人のために、「if文」ではなく「if式」という文法も用意されている。これを使って、同様のコードを書くとリスト18-2のようになる。if文はもちろん「文」であり、式の中にif文を組み込んで表記することはできないが、if式は「式」なので、通常の計算式の中で条件分岐が必要なときにもそこに含められる(if式がないと、if文を使ってあらかじめ条件によって変わる値を計算してから、その値を使って式を書かなければならない場合が出てくる)。
color = 'blue' if predicted_label == true_label else 'red'
color # 'red'と出力される
この一文は、図18のような構文になっている。注意点としては、ifキーワードの前に「真の場合の値」を記述する必要があることだ。この構文は、Python言語では条件式と呼ばれており、C言語系の三項演算子に相当するものである。
ちなみに、条件部分には、if文同様に、比較演算子を使用できる。
せっかくなので、もう少し「条件」について説明しておこう。
本連載では、非常にシンプルな条件指定の例しか見ていない。例えば、複数の条件を指定するにはどうすればよいだろうか。リスト19-1はその例で、変数cond_numが100、かつ、変数cond_strが犬のときが「OK」で、それ以外は「NG」という条件を、2つのif文で表現している。
cond_num = 98
cond_str = '猫'
# 上の2行は下記コードの実行に必要な仮のコード
if cond_num == 100:
if cond_str == '犬':
answer = 'OK'
else:
answer = 'NG'
else:
answer = 'NG'
answer # 'NG'と出力される
確かにこれは間違いではないが、書き方としては冗長である。論理演算子(ブール演算子)を使えば、複数の条件をまとめて記述できる。先ほどの説明で「A条件かつB条件」という書き方をした。この「かつ」に対応する論理演算子がandである。andを使って書くと、リスト19-2のようになる。
if cond_num == 100 and cond_str == '犬':
answer = 'OK'
else:
answer = 'NG'
answer # 'NG'と出力される
Copyright© Digital Advantage Corp. All Rights Reserved.