-->
選択構造は、条件によって処理する内容を変えることができる構造です。
Pythonでは主にif文で選択処理を行います。
Pythonにおけるif文の一般的な記法は以下のとおりです。
if 条件:
処理1
else:
処理2
if文では、
if
句の条件が真の時(条件が成立する時):if
句下のインデント箇所である処理1
が実行されます。if
句の条件が偽の時(条件が成立しない時):else
句以下のインデント箇所である処理2
が実行されます。各処理は、インデントして記述します。インデントする処理の行数は複数行でも構いません。
例題1では、変数a
の値が0より大きいかどうかを判定し、結果に応じてメッセージを出力するプログラムを作成します。変数a
は2
が代入されており、a < 0
は偽となるため、if
句の条件を満たさずif
句下の処理(print("aは0以下です")
)は実行されません。if
句の条件を満たさなかったため、代わりにelse
句下の処理(print("aは0より大きいです")
)が実行されます。
a = 2
if a < 0:
print("aは0以下です")
else:
print("aは0より大きいです")
print("end")
なお、else
句を用いずに以下のようにif
句のみ記述することもできます。
if 条件:
処理1
処理2
この場合、条件を満たす場合のみ「処理1」を行うようになるので、
という流れになります。
if文において、複数の条件を指定することもできます。複数の条件を指定する場合は、elif
句を用います。
if 条件1:
処理1
elif 条件2:
処理2
else:
処理3
elif
句は、if
句の条件が偽で、かつelif
句の条件が真の場合に、elif
句下の処理(処理2
)が実行されます。elif
句の条件が偽の場合は、else
句下の処理(処理3
)が実行されます。
a = 0
if a < 0:
print("aは0以下です")
elif a == 0:
print("aは0です")
else:
print("aは0より大きいです")
print("end")
例題2では、変数a
の値と0
との比較を行い、結果に応じてメッセージを出力するプログラムを作成します。変数a
は0
が代入されており、if文の各句での条件判定は以下の通りです。
if a < 0:
:変数a
の値は0
であり、a < 0
を満たさないため、この条件は偽となり、if
句下の処理は実行されません。elif a == 0:
:変数a
の値は0
であり、a == 0
を満たすため、この条件は真となり、elif
句下の処理(print("aは0です")
)が実行されます。else:
:elif
句の条件を満たし、elif
句下の処理が実行されたため、else
句下の処理は実行されません。elif
句は複数記述することができます。複数のelif
句を記述する場合は、以下のように記述します。
if 条件1:
処理1
elif 条件2:
処理2
elif 条件3:
処理3
else:
処理4
つまり、else
句というのは、すべてのif
句やelif
句の条件が成立しなかった場合に実行される処理を指します。
if
句で書きます。if
句以外に条件分岐を行う場合は、続けてelif
句を使います。elif
句は複数記述することができます。else
句を使います。else
句を書く場合は、最後に一度だけ記述します。if
句やelif
句の後にif
の句を続けた場合、それらは別々の条件として扱われます。# 間違った書き方の例
if 条件1:
処理1
else 条件2: # else句には条件を書くことはできない
処理2
elif 条件3: # elif句はif句の後に書く。else句の後に書くことはできない
処理3
また、判定は上から順に行われ、条件を満たす処理がある場合、それ以降の処理は行われません。
a = 2
if a > 0:
print("aは0以上です")
elif a == 2:
print("aは2です")
print("end")
例題3では、変数a
に2
が代入されており、if
句のa > 0
およびelif
句のa == 2
の条件のどちらも成立します。しかし、判定は上から順に行われるため、if
句の条件が成立した時点で処理が終了し、elif
句の条件は判定されません。そのため、print("aは2です")
は実行されません。
もしどちらも出力したい場合は、例題4ように別々のif
句として記述するとよいでしょう。
a = 2
if a > 0:
print("aは0以上です")
if a == 2:
print("aは2です")
print("end")
複数の条件を組み合わせて判定する場合、論理演算子を使うことができます。Pythonには以下の論理演算子があります。
and
:論理積。条件1 and 条件2
は、条件1
と条件2
が両方成立する場合に真となります。or
:論理和。条件1 or 条件2
は、条件1
または条件2
のどちらかが成立する場合に真となります。not
:否定。not 条件
は、条件
が成立しない場合に真となります。a = 2
b = -5
if a > 0 and b > 0:
print("aとbはともに0より大きいです")
if a > 0 or b > 0:
print("aまたはbは0より大きいです")
if not a < 0:
print("aは0より小さくありません")
print("end")
for文やwhile文同様、if文の中に、さらにインデントして別のif文を記述することもできます。このように、複数の条件分岐を組み合わせることで、複雑な条件を表現することができます。
a = 2
b = 3
if a == 2:
print("a is 2")
if b == 3:
print("b is 3")
else:
print("b is not 3")
elif a == 3:
print("a is 3")
if b == 3:
print("b is 3")
print("end")
選択構造は、条件によって処理を変えることができる構造です。
Pythonでは主にif文で選択処理を行います。
if 条件:
処理1
else:
処理2
また、複数の条件を指定する場合は、elif
句を用いることができます。複数の条件を組み合わせて判定する場合、論理演算子を使うことができます。
if 条件1:
処理1
elif 条件2:
処理2
else:
処理3
if 条件1 and 条件2:
処理1
if 条件1 or 条件2:
処理2
if not 条件:
処理3
数字num
に0
~999
の間のいずれかの数字を代入するとします。
この数字num
の桁数を判定し、以下のように条件に応じたメッセージを出力するプログラムを作成する。
(※ただし、num
には代入された数字が入る)
num
が0
~9
の範囲の数字の場合:「num」は1桁の数字です
num
が10
~99
の範囲の数字の場合:「num」は2桁の数字です
num
が100
~999
の範囲の数字の場合:「num」は3桁の数字です
「ア」と「イ」に当てはまる適切な回答を選び、プログラムを完成させてください。
num = ... # 0~999の範囲の数字が入る
if num「ア」0 and num < 10:
print(f"「{num}」は1桁の数字です")
elif num「ア」10 and num < 100:
print(f"「{num}」は2桁の数字です")
「イ」:
print(f"「{num}」は3桁の数字です")
答え:ア:>=、 イ:else
「ア」について:
0
~9
の範囲および、10
~99
の範囲の数字を判定するためには、num
が0
以上かつ10
未満、または10
以上かつ100
未満であることを判定する必要があります。そのため、>=
を用いて0
以上かつ10
未満を判定する必要があります。ゆえに、「ア」は>=
となります。
「イ」について:
if
句およびelif
句で0
~99
の範囲の数字に関しての処理を行っているため、else
句を用いれば、のこりの100
~999
の範囲の数字に関しての処理を行うことができます。また、elif
句を使う場合は条件をあわせて記述する必要があり、単体での使用は不適です。そのため、「イ」はelse
となります。
作成したプログラムが桁数に応じて正しく出力が変わるかを確認するために、for文を用いて1
, 23
, 456
の3つの数字に対してそれぞれの出力を確認してみましよう:
for num in [1, 23, 456]:
if num >= 0 and num < 10:
print(f"「{num}」は1桁の数字です")
elif num >= 10 and num < 100:
print(f"「{num}」は2桁の数字です")
else:
print(f"「{num}」は3桁の数字です")
このプログラムを実行すると、それぞれの数字に対して正しい出力がされることが分かります。