連載
» 2019年05月07日 05時00分 公開

Python入門:[Python入門]if文による条件分岐 (1/2)

複雑な構造のプログラムを書くには「制御構造」が欠かせない。その中でも、条件によって処理を振り分けるために使われるif文を紹介する。

[かわさきしんじ,Deep Insider編集部]
「Python入門」のインデックス

連載目次

 前回までにPythonのプログラムを構成する最小限の要素ともいえる、文字列、数値、変数、幾つかの演算子(四則演算子、代入演算子)、コメントなどについて見てきた。今回から3回に分けて、より複雑なプログラムを作成する上で必須の要素である「制御構造」と呼ばれる機能を取り上げる。今回は制御構造について簡単に説明をした後で、「条件分岐」を行うための構文を行う構文を紹介しよう。

制御構造とは

 本連載の第2回「Hello Python」では「プログラムは上から下に順に実行される」と述べた。例えば、以下のコードは上から順に実行される。

print('最初に実行される')
print('次に実行される')
print('最後に実行される')

3行のコードは上から順に実行される

 これは直観的でよく分かる動作だ。しかし、それだけではうまくプログラムを構成できないこともある。例えば、「何らかの条件が成立したら処理Aを実行し、そうでなければ処理Bを実行する」とか「指定した回数だけ、同じ(ようで少しだけ違う)処理を繰り返す」とかといった場合がそうだ(後者は「必要なだけ、似た処理をプログラムに書き下せばいいじゃん」と思う人もいるかもしれないが、次回に取り上げる「繰り返し処理」を行うための制御構造を使うことで、コードを簡潔にできる)。

 このような処理では、プログラムコードは単に上から順に実行されるのではなく、「条件によって実行されるところと実行されないところ」ができたり、「特定の箇所だけが何度も実行」されたりするようになる。プログラム実行の流れを変化させる、構文をまとめて「制御構造」と呼ぶ。

制御構造の役割 制御構造の役割

 制御構造には大きく分けて次の2種類がある(この他にもプログラムの実行フローを制御する構文は幾つもあるが、それらについては必要に応じて説明していくことにしよう)。

  • 条件分岐:何らかの条件に応じて、実行するプログラムコードを分岐させる
  • 繰り返し処理:何らかの条件が成立している間、同一のコードを実行し続ける

 以下ではこのうちの「条件分岐」を取り上げると共に、Pythonプログラムを構成するさまざまな要素(前回紹介しなかった演算子など)も取り上げていこう。「繰り返し処理」については次回紹介する。

条件分岐

 上でも述べたが「条件分岐」とは、「何らかの条件に応じて、実行するプログラムコードを分岐させる」ものだ。Pythonではif文を使って条件分岐を行う(他のプログラミング言語ではswitch文も備えているものもあるが、Pythonにはswitch文はない)。

if文の例 if文の例

 if文はその名前から想像できる通り、「もしXXXがYYYだったらAする。そうでなかったらBする」といった処理を行う。

if文の基本構文

 まずはif文の最も基本的な構文を以下に示す。

if 条件:
    条件成立時に実行するブロック

if文の最も基本的な構文

 これがif文の最も基本的な構文だ。なお、ここまでに説明してこなかったが、今回紹介するif文や、次回と次々回に取り上げるfor文とwhile文など、複雑な構造を持つ文のことを「複合文」(他の文を含む文)と呼ぶ(これに対して、「x = 0」のような単純な文のことを「単純文」と呼ぶ)。

 複合文では(特にif文ではよく言及されるが)、文は1つ以上の「節」で構成される。上に示した構文の場合、「節」は「if 条件:」と、その下でインデントされている「ブロック」(「スイート」ともいう)で構成される。そして、最初の行が「if」であることから、これを「if節」と呼ぶ(後で見る「if〜else」文はif節とelse節の2つの節で、「if〜elif〜else」文はif節とelif節とelse節で構成される)。

if文はif節など、さまざまな節で構成される if文はif節など、さまざまな節で構成される

 ここでは、ユーザーから何かの数を受け取り、それが偶数だったら「even」と画面に表示するプログラムを考えてみよう。回りくどいかもしれないが、このコードがどのようなものになるかを少しずつ考えていこう。ユーザーからの入力は変数numberに受け取るものとすると、これはこのように書き下せる。

変数numberユーザーからの入力を受け取る

if 変数numberの値が偶数:
    条件成立時に実行するブロック(「even」と画面に表示)

プログラムの大枠

 まず、この場合、上に示した構文の「条件成立時に実行するブロック」とは「evenと画面に表示する」ことであり、これは既におなじみのprint関数を使えばよい。

変数numberにユーザーからの入力を受け取る

if 変数numberの値が偶数:
    print('even')

プログラムの概形

 ユーザーからの入力を受け取るには、第2回「Hello Python」の「もう少し難しいHello Worldプログラム」などでも使用したinput関数が使える。よって、上のコードは次のように書き換えられる。

number = input('何か数値を入力してください: ')

if 変数numberの値が偶数:
    print('even')

入力された値が偶数かどうかを判定するプログラム

 ただし、第5回「Pythonの文字列の基本」の「文字列と数値の変換:str/int/float関数」でも述べたように、input関数を使ってユーザーから受け取る入力は全て文字列となる。「100」という文字列は「1」という文字、「0」という文字、「0」という文字が連なったもので、「100」という整数値ではないことには注意が必要だ。そのため、文字列を整数に変換する必要があるが、これにはint関数が使える。

number = input('何か数値を入力してください: ')
number = int(number)

if 変数numberの値が偶数:
    print('even')

ユーザーが入力した文字列表現の数値を整数値に変換するコードを追加したところ

 これで、実際のif文の説明に入る準備が整った。if文の条件は「入力された数値が偶数」つまり「変数numberの値が偶数」である。偶数とは「2で割り切れる数」つまり「2で整数除算を行った余りが0となる数」のことだ。第3回「数値と算術演算」の「数値の算術演算と演算子」で述べたように、余りを求めるには「%」演算子が使える。ここでは「number % 2」で変数numberの値を2で割った余りが得られる。ある値が何かの値と等しいかを調べるには比較演算子の「==」が使える。つまり、「変数numberの値が偶数」かは「number % 2 == 0」のようにして表現できるということだ。

 このことから、条件の部分をPythonのコードとして表現すると次のようになる。

number = input('何か数値を入力してください: ')
number = int(number)

if number % 2 == 0:
    print('even')

完成したプログラム

 このコードをセルに入力して、実行した例を示す。Jupyter Notebookなどでは、input関数によるユーザー入力があれば、セルの下にその入力ボックスが表示されるので、そこに何か適当な数値を入れて[Enter]キーを入力することで、それが偶数かどうかを判定してくれる。

実行画面 実行画面

 ここまでに見てきたのが、一番簡単なif文の使い方だ。ただし、これでは「もしXXXがYYYだったら、Aする」という処理しか表現できない。「そうでなかったらBする」という処理を行いたいときにはどうすればよいだろう。例えば、「ユーザーが入力した数値が偶数ならevenと、そうでなかったらoddと表示する」といった処理がそうだ。このようなときには次に紹介する「if〜else文」を使う。

if〜else文

 if〜else文の構造は次のようになる。

if 条件:
    条件が成立したときに実行するブロック
else:
    条件が成立しなかったときに実行するブロック

if〜else文の構文

 既に述べた通り、if〜else文はif節とelse節で構成される。「else:」は「if 条件:」と同じインデント位置に置き、そこからインデントを付けて、指定した条件が成立しなかったときに実行する処理を記述する。この形式のif文を使えば、「ユーザーが入力した数値が偶数ならevenと、そうでなかったらoddと表示する」処理が次のように書ける。

number = input('何か数値を入力してください: ')
number = int(number)

if number % 2 == 0:
    print('even')
else:
    print('odd')

ユーザーが入力した値が偶数か奇数かを判断するプログラム

 実行結果を以下に示す。

「9」は奇数と判断された 「9」は奇数と判断された

 if〜else文は「条件が成り立つか成り立たないか」の二択で、全ての場合分けを表現できる場合には有用だが、そうではなくさらに分岐が必要な場合もある。そこで、プログラミングの世界ではよくある演習問題である「FizzBuzz問題」を解きながら、if文のもう1つの形式である「if〜elif〜else」文について見てみることにしよう。

       1|2 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。