条件分岐¶
1. プログラムの流れを変える「制御構造」¶
Pythonのプログラムは、通常は上から順番に1行ずつ実行されます。しかし、「制御構造」を使えば、特定の条件に応じて処理の流れを変えることができます。これにより、より柔軟で賢いプログラムが書けるようになります。
制御構造の3つの基本形¶
Pythonのプログラムは「文(statement)」の集まりです。その実行順を変える代表的な制御構造には次の3つがあります:
1. 順次:¶
- 最も基本的な実行の流れで、上から順に処理されます。
flowchart TD
Start([開始])
Process1[処理1]
Process2[処理2]
Process3[処理3]
End([終了])
Start --> Process1 --> Process2 --> Process3 --> End
2.分岐(条件分岐):¶
- 条件に応じて異なる処理を行います(例:if文)。
flowchart TD
Start([開始])
Process1[処理1]
Decision{条件}
Process2[処理2]
Process3[処理3]
End([終了])
Start --> Process1 --> Decision
Decision -- TRUE の場合 --> Process2 --> End
Decision -- FALSE の場合 --> Process3 --> End
3.繰り返し(ループ):¶
- 同じ処理を何度も繰り返します(例:for文、while文)。
flowchart TD
Start([開始])
Check{条件}
Process[処理]
End([終了])
Start --> Check
Check -- TRUE の場合 --> Process
Process --> Check
Check -- FALSE の場合 --> End
if文を使って「ある条件を満たすときだけ処理を行う」といったことが可能になります。
構造化定理
プログラムは「順次」「分岐」「繰り返し」の3つの制御構造を組み合わせれば、どんなに複雑な動作でも表現できるとされています。
2. 条件分岐の基本:if 文¶
if文の構造¶
Pythonの if
文は、次のような構造になっています。
if 条件式:
条件が True のときに実行する処理
if
の後に「条件式」を書きます。この条件が True(真) の場合、続く処理が実行されます。- 条件が False(偽) の場合、
if
文の中の処理は スキップ されます。 if
文の後には コロン(:
) を付ける必要があります。
例えば、ユーザーが入力した数が10以上なら「10以上です」と表示するプログラムを考えてみます。
プログラム:
number = int(input("数値を入力してください: "))
if number >= 10:
print("10以上です")
出力:
数値を入力してください: 15
10以上です
出力例(入力が5の場合):
数値を入力してください: 5
(何も表示されない)
これは、if
文の条件 number >= 10
が False
になったため、print("10以上です")
の処理が実行されなかったからです。
3. ブロックとインデント¶
Pythonでは、条件分岐やループの処理をまとめるときに 「ブロック」 という概念を使います。ブロックを区別するためには 「インデント(字下げ)」 を正しく使う必要があります。
ブロックとは?¶
ブロックとは、 ある処理をまとめてひとつのグループにすること です。
Pythonでは、if
文やループなどの制御構造の後に続く処理を ブロック として記述します。
インデントとは?¶
Pythonでは、 ブロックの始まりをインデント(字下げ)で表現 します。
if 条件式:
条件がTrueのときに実行する処理1
条件がTrueのときに実行する処理2
if
文の 次の行から、半角スペース4つ分(またはTabキー1回)の インデント をつけて処理を記述 します。- インデントがあることで、
if
文の条件がTrue
のときに実行されるブロックであることがわかります。
正しいインデントの例¶
以下のコードでは、if
文の条件が True
のときに、2つの print
文が実行されます。
プログラム:
score = 85
if score >= 80:
print("合格です")
print("おめでとうございます!")
出力:
合格です
おめでとうございます!
間違ったインデントの例(エラー)¶
Pythonでは、インデントを間違えると エラー になります。
プログラム:
score = 85
if score >= 80:
print("合格です") # ← インデントなし(エラー)
print("おめでとうございます!") # ← これもエラー
出力:
File "/var/folders/lc/k7jt3gx9283453ptp9t9ty5m0000gn/T/ipykernel_29797/3720484765.py", line 4
print("合格です") # ← インデントなし(エラー)
^
IndentationError: expected an indented block
4. 条件式と演算子¶
条件分岐を使うためには、「条件式」を理解することが重要です。 条件式は、 ある条件が「真(True)」か「偽(False)」かを判定するための式 です。
比較演算子¶
Pythonでは、数値や文字列を比較するときに「比較演算子」を使います。
演算子 | 意味 | 例 (a = 10, b = 20 ) |
結果 |
---|---|---|---|
== |
等しい | a == b |
False |
!= |
等しくない | a != b |
True |
< |
より小さい | a < b |
True |
> |
より大きい | a > b |
False |
<= |
以下 | a <= b |
True |
>= |
以上 | a >= b |
False |
論理演算子¶
論理演算子は、複数の条件式を組み合わせて、一つの条件式として評価するための演算子です。Pythonでは、主に次の3つの論理演算子が使われます。
- and(かつ)
- or(または)
- not(否定)
and
¶
and
演算子は、左側と右側の条件が両方ともTrue(真)である場合にのみ、全体がTrueになります。
プログラム:
x = 5
y = 10
if x > 0 and y > 0:
print("xもyも正の数です")
出力:
xもyも正の数です
or
¶
or
演算子は、左側または右側の条件が少なくとも一方がTrueであれば、全体がTrueになります。
プログラム:
x = 5
y = -10
if x > 0 or y > 0:
print("xまたはyのいずれかが正の数です")
出力:
xまたはyのいずれかが正の数です
not
¶
not
演算子は、条件式の結果を反転させます。TrueがFalseになり、FalseがTrueになります。
プログラム:
x = 5
if not x < 0:
print("xは負の数ではありません")
出力:
xは負の数ではありません
これらの論理演算子を使うことで、複雑な条件分岐を簡潔に表現できます。例えば、次のように複数の条件を組み合わせて使うこともできます。次の例では、x > 0 and y > 0
がTrueであり、z > 0
はFalseですが、or
演算子により条件全体がTrueとなります。
プログラム:
x = 5
y = 10
z = -3
if x > 0 and y > 0 or z > 0:
print("条件を満たしました")
出力:
条件を満たしました
in
演算子¶
in
演算子は、リストや文字列、タプル、セット、辞書 などの中に 特定の値が含まれているかどうか を判定するときに使います。
また、not in
を使うと、値が含まれていないかどうか を判定できます。
in
演算子の基本¶
in
を使うと、ある値がリストや文字列の中にあるかを確認できます。
文字列の中での使用¶
プログラム:
word = "hello"
if "h" in word:
print("h は含まれています!")
出力:
h は含まれています!
リストの中での利用¶
プログラム:
fruits = ["apple", "banana", "cherry"]
if "banana" in fruits:
print("バナナがあります!")
出力:
バナナがあります!
辞書の中での使用¶
辞書に対して in
を使うと、キーが存在するかどうか を判定できます。
プログラム:
scores = {"Alice": 85, "Bob": 90, "Charlie": 78}
if "Alice" in scores:
print("Alice のスコアがあります!")
出力:
Alice のスコアがあります!
値(85
など)を検索する場合は、values()
を使います。
プログラム:
if 90 in scores.values():
print("スコア90が存在します!")
出力:
スコア90が存在します!
not in 演算子¶
not in
を使うと、値が含まれていない場合の判定 ができます。
例:リストの中に値がない場合
プログラム:
fruits = ["apple", "banana", "cherry"]
if "grape" not in fruits:
print("グレープはありません!")
出力:
グレープはありません!
真偽値¶
プログラムでは、「ある条件が真か偽か」を判断して処理を分岐させることがよくあります。 この「真(True)か偽(False)か」を表すデータ型を 「真偽値(Boolean型)」 といいます。
真偽値とは?¶
Python では、真偽値は以下の2つの値をとります:
True
(真)False
(偽)
Python では、大文字の True
と False
をそのまま使います。
プログラム:
x = True
y = False
print(x)
print(y)
出力
True
False
比較演算の結果としての真偽値¶
比較演算子(==
, !=
, >
, <
, >=
, <=
など)を使うと、結果として True
か False
が返されます。
プログラム:
print(5 > 3)
print(5 < 3)
print(10 == 10)
print(10 != 10)
出力:
True
False
True
False
例:条件分岐での利用
プログラム:
age = 18
if age >= 18:
print("成人です")
else:
print("未成年です")
出力:
成人です
Pythonで「偽」と判定される値¶
Pythonでは、以下の値は False
(偽)と判定されます。
データ型 | 偽と判定される値 |
---|---|
数値型 | 0 |
文字列型 | "" (空文字) |
リスト型 | [] (空リスト) |
タプル型 | () (空タプル) |
セット型 | set() (空セット) |
辞書型 | {} (空辞書) |
特殊値 | None |
上記以外の値は True
(真)と判定されます。
例:条件分岐での判定
プログラム:
data = []
if data:
print("データがあります")
else:
print("データが空です")
出力:
データが空です
bool()
を使った真偽値の確認¶
bool()
関数を使うと、任意の値が True
か False
かを調べることができます。
プログラム:
print(bool(100))
print(bool(0))
print(bool("Hello"))
print(bool(""))
print(bool([]))
print(bool([1, 2, 3]))
出力:
True
False
True
False
False
True
真偽値を使った実践例¶
例:パスワードの入力チェック
プログラム:
password = input("パスワードを入力してください: ")
if password:
print("パスワードが設定されました")
else:
print("パスワードが入力されていません")
出力:
パスワードを入力してください:
パスワードが入力されていません
5. 分岐構文のバリエーション¶
3種類のif文¶
Pythonのif
文にはいくつかの書き方がありますが、主に3つのパターンを覚えておくと便利です。
- if-else構文
- ifのみの構文
- if-elif構文
1. if-else 構文¶
if-else構文は、条件がTrueの場合とFalseの場合の両方を処理する基本的な条件分岐です。
構文:
if 条件:
# 条件がTrueの時に実行される処理
else:
# 条件がFalseの時に実行される処理
次の例では、x > 0
がTrueなので、「xは正の数です」と表示されます。
プログラム:
x = 10
if x > 0:
print("xは正の数です")
else:
print("xは負の数またはゼロです")
出力:
xは正の数です
2. ifのみの構文¶
if
のみを使って、条件がTrueの場合にのみ処理を実行するパターンです。条件がFalseの場合、何も実行されません。
構文:
if 条件:
# 条件がTrueの時に実行される処理
次の例では、x > 0
がTrueなので、「xは正の数です」と表示されます。条件がFalseの場合は何も表示されません。
プログラム:
x = 10
if x > 0:
print("xは正の数です")
出力:
xは正の数です
3. if-elif 構文¶
if-elif構文は、複数の条件をチェックするために使います。最初の条件がFalseだった場合に、次の条件を評価します。elseを使うと、どの条件にも当てはまらない場合の処理を記述できます。
構文:
if 条件1:
# 条件1がTrueの時に実行される処理
elif 条件2:
# 条件2がTrueの時に実行される処理
else:
# 条件1も条件2もFalseの時に実行される処理
次の例では、x == 0
がTrueなので、「xはゼロです」と表示されます。もしx
が負の数だった場合、else
が実行されます。
プログラム:
x = 0
if x > 0:
print("xは正の数です")
elif x == 0:
print("xはゼロです")
else:
print("xは負の数です")
出力:
xはゼロです
ifのネスト(入れ子)¶
複数の条件を組み合わせて処理したい場合、if
文を入れ子にすることができます。これにより、複雑な条件を階層的に処理することが可能です。
構文:
if 条件1:
if 条件2:
# 条件1と条件2が両方ともTrueの時に実行される処理
else:
# 条件1がTrueで条件2がFalseの時に実行される処理
else:
# 条件1がFalseの時に実行される処理
次の例では、x > 0
がTrueで、その中でy > 0
もTrueなので、「xもyも正の数です」と表示されます。
プログラム:
x = 10
y = 20
if x > 0:
if y > 0:
print("xもyも正の数です")
else:
print("xは正の数だけど、yは負の数です")
else:
print("xは負の数です")
出力:
xもyも正の数です
これらの構文バリエーションを使いこなすことで、Pythonでの条件分岐がより柔軟で強力に扱えるようになります。複雑なプログラムでも、条件を整理して読みやすく記述することが可能です。
この章のまとめ¶
この章では、Pythonの条件分岐について解説しました。
1. プログラムの流れ
プログラムは「文」と「制御構造」で構成され、制御構造によりプログラムの実行順序を変更します。
2. 条件分岐の基本構造
if
文を使って、条件に応じた処理を実行する方法を学びます。ブロックとインデントが重要です。
3. 条件式
条件式では、比較演算子、in
演算子、真偽値を使って条件を評価します。また、論理演算子(and
, or
, not
)を使って、複数の条件を組み合わせる方法を学びます。
4. 分岐構文のバリエーション
さまざまなif
文の使い方として、if-else構文、ifのみ、if-elif構文、ifのネストなどを紹介します。これにより、複雑な条件分岐をシンプルに記述できるようになります。
これらを組み合わせることで、条件に応じた柔軟で読みやすいプログラムが書けるようになります。
演習問題¶
基本的なif文の使い方
x
が 0
より大きい場合に「 xは正の数です
」と表示するプログラムを作成してください。x
が 0
以下の場合は何も表示しないようにしてください。
if-else文を使ってみよう
age
が 18
以上の場合は「成人です」と表示し、18
未満の場合は「未成年です」と表示するプログラムを作成してください。
論理演算子の使用
x
と y
が両方とも正の数の場合に「 xとyは正の数です
」と表示し、どちらか一方が負の数の場合は「 x
か y
のいずれかが負の数です」と表示するプログラムを作成してください。論理演算子 and
を使って条件を組み合わせてください。
elif構文の活用
temperature
が 30
以上の場合は「 暑いです
」、20
以上 30
未満の場合は「 快適です
」、それ以外の場合は「 寒いです
」と表示するプログラムを作成してください。if-elif-else構文を使ってください。
ifのネストを使った問題
x
が正の数の場合、さらに y
が正の数であれば「 xもyも正の数です
」、そうでない場合は「 xは正の数ですがyは正の数ではありません
」と表示するプログラムを作成してください。if文をネストして使ってください。