フロー制御
Python でプログラムを実行すると、ソースコードを上から下へ順に読み込んで処理していきます。この流れのことをフローとよびます。しかし、それだけではプログラムは単純なことしかできません。その時々の条件によって流れを変える フロー制御 を用いることで複雑なプログラムを作ることができるのです。今回の記事で解説する if文、else文、elif文 も代表的なフロー制御です。
if 構文
Python で「ある条件を満たす場合にはこれを処理しなさい」と命令したいときは if 構文 を用います。if に条件文を添えて改行し、処理内容はインデントしたブロックの中に記述します。
条件を満たさない場合は、ブロックの内容を無視して下に流れてゆくことになります。
if文を使って簡単なクイズのコードを書いてみます。
# PYTHON_IF
# In[1]
# 英語クイズプログラム
x = input("重力を英訳すると?:")
if x == "gravity":
print("正解です!")
コード In[1] を実行すると「重力を英訳すると?」という質問文付きのテキスト入力ボックスが現れます。ユーザーが「gravity」と入力すると「正解です!」というメッセージが表示されます。
if ... else 構文
コードでは間違った答えを入力したときに何も表示されません。それではあまりに無愛想なので、間違えたときには「残念! 正解は gravity です!」と表示するプログラムにしてみましょう。そういう場合に使うのが else文 です。
# In[2]
# 英語クイズプログラム
x = input("重力を英訳すると?:")
if x == "gravity":
print("正解です!")
else:
print("残念! 正解は gravity です!")
else文 では if文の条件に適さなかった場合に実行させる処理を記述します。
フローの視点で見ると、if 文の条件を満たさなかった場合は、その行を素通りして下に降り、else 文のブロックに書かれてあるコードを読み込んで実行します。そのあとで、if 文の条件を満たしたときに枝分かれしたフローと合流します。
else 文を用いた例をもう1つ紹介します。
1 ~ 10 の乱数を発生させて、その数字が偶数か奇数かを判定するプログラムです。下のサンプルコードでは、numpy というモジュールから randint 関数を呼びだして乱数を生成しています。
numpyモジュールが使えない環境にある場合には、代わりに from random import* と記述して、標準モジュールから同じ名前の randint 関数を呼びだしてください。
# In[3]
# 偶奇判定プログラム
# numpyモジュールから乱数を生成する関数を呼びだす
from numpy.random import *
# 1~10 の整数をランダムに生成
x = randint(1, 11)
# x の値を表示します
print("x =",x)
# x を 2 で割った余りが 0 なら x は偶数
if x % 2 == 0:
print("x は偶数です")
# そうでない場合は x は奇数
else:
print("x は奇数です")
コード In[3] を実行すると、生成された乱数 x の値が表示され、その数字が偶数であれば「偶数です」、奇数であれば「奇数です」と表示されます。
if ... elif 構文
「条件 X を満たす場合は A を実行し、X を満たさなくても条件 Y を満たす場合は B を実行し ... 」というように複数の条件を重ねて処理したい場合は elif 文 を用います。
if 文の条件を満たさなかった場合は elif 文に降りて、そこで次の条件に合致するかどうかを判断します。条件を満たせば処理 B を実行したあとで処理 C へ移ります。
以下はユーザーが入力した高度 (km) に応じて、対流圏、成層圏、中間圏、熱圏、大気圏外のいずれかを返すプログラムです。
# In[4]
# 大気圏と高度の対応プログラム
# ユーザーに高度の入力を促す
x = input("高度 (km) を入力してください:")
# 文字列を float に変換
x = float(x)
if x < 12:
print("対流圏 (Troposphere) です")
elif 12 <= x < 50:
print("成層圏 (Stratsphere) です")
elif 50 <= x < 80:
print("中間圏 (Mesosphere) です")
elif 80 <= x < 800:
print("熱圏 (Thermosphere) です")
else:
print("大気圏外 (outer space) です")
[補足] 対流圏は緯度によって境界線が大きく異なり、9 ~ 17 km の幅があります。熱圏の外側にさらに外気圏 (Exosphere) をおく場合もあります。ちなみに NASA は高度 100km の「カーマン・ライン」とよばれる境界線の向こう側を「宇宙空間」と定義しています。
AI が if, else, elif による条件分枝について解説します
[AI] Pythonの条件分岐には、`if`、`else`、`elif`(else ifの略)を使用します。これらのキーワードを組み合わせて、複数の条件に基づいてプログラムの実行を制御することができます。以下に、それぞれのキーワードの使用方法と基本的な構文を示します。
1. `if`文は最も基本的な条件分岐です。指定した条件が真(True)の場合、そのブロック内のコードが実行されます。
◆◆◆◆◆
if 条件:
# 条件が真の場合に実行するコード
◆◆◆◆◆
2. `else`文は`if`文と組み合わせて使用され、条件が偽(False)の場合に実行されるコードを指定します。
◆◆◆◆◆
if 条件:
# 条件が真の場合に実行するコード
else:
# 条件が偽の場合に実行するコード
◆◆◆◆◆
3. `elif`文は複数の条件をチェックするために使用されます。最初の`if`文の条件が偽の場合、次の`elif`文に進み、条件が真の場合にそのブロック内のコードが実行されます。必要に応じて、複数の`elif`文を追加できます。
◆◆◆◆◆
if 条件1:
# 条件1が真の場合に実行するコード
elif 条件2:
# 条件2が真の場合に実行するコード
elif 条件3:
# 条件3が真の場合に実行するコード
else:
# いずれの条件も偽の場合に実行するコード
◆◆◆◆◆
これらの条件分岐を使用することで、プログラムは異なるパスを選択し、条件に基づいて処理を行うことができます。適切な条件を設定し、適切なコードブロックを実行するようにプログラムを設計することが重要です。