本日は、Pythonにおけるif文についてご紹介します。
if文を使う場面は主にフロー制御を行うときに登場します。
Pythonにおけるフロー制御(制御構文)では、if
文を使用して条件に基づいて異なる処理を実行できます。
if
文にはいくつかのバリエーションがあり、条件分岐の複雑さや状況に応じて使い分けることができます。
1. 基本的な if 文
条件が真(True
)の場合に処理を実行します。
x = 10
if x > 5:
print("xは5より大きい")
出力:
xは5より大きい
2. if-else 文
条件が偽(False
)の場合に別の処理を実行します。
x = 3
if x > 5:
print("xは5より大きい")
else:
print("xは5以下")
出力:
xは5以下
3. if-elif-else 文
複数の条件をチェックし、最初に真となった条件の処理を実行します。どれも当てはまらない場合はelse
ブロックが実行されます。
x = 7
if x > 10:
print("xは10より大きい")
elif x > 5:
print("xは5より大きいが10以下")
else:
print("xは5以下")
出力:
xは5より大きいが10以下
4. ネストされた if 文
if
文の中にさらにif
文を入れることで、条件の入れ子構造を作成できます。
x = 8
if x > 5:
if x < 10:
print("xは5より大きく10未満")
else:
print("xは10以上")
else:
print("xは5以下")
出力:
xは5より大きく10未満
5. 複数条件の組み合わせ
a. 論理演算子 (and, or, not) を使う
複数の条件を論理演算子で結合して扱えます。
x = 7
if x > 5 and x < 10:
print("xは5より大きく10未満")
出力:
xは5より大きく10未満
b. in / not in を使う
特定の値がリストや文字列に含まれるかどうかを確認できます。
fruits = ["apple", "banana", "cherry"]
if "apple" in fruits:
print("リンゴはリストに含まれています")
出力:
リンゴはリストに含まれています
6. 短縮形の if(ワンライナー)
if
文は簡潔な場合に1行で書けます。
a. ワンライナー if
x = 10
if x > 5: print("xは5より大きい")
出力:
xは5より大きい
b. 三項演算子
三項演算子を使うと、条件に応じた値を1行で設定できます。
x = 10
result = "大きい" if x > 5 else "小さい"
print(result)
出力:
大きい
7. 条件がない if(例外的なケース)
if
文では、値自体が真理値として評価されます。
a. 値の真理値の利用
- 真として評価される: 非ゼロの数値、非空のリスト/辞書/文字列
- 偽として評価される:
0
,None
, 空のリスト/辞書/文字列
x = [1, 2, 3]
if x: # リストが空でない場合
print("xは空ではありません")
出力:
xは空ではありません
8. Python特有の条件式
a. 条件式の連結
Pythonでは、数学の記法のように条件式を連結できます。
x = 7
if 5 < x < 10: # 5 < x and x < 10 と同じ
print("xは5より大きく10未満")
出力:
xは5より大きく10未満
9. 実行をスキップする pass
if
文の中で何も実行せずに処理をスキップする場合はpass
を使います。
x = 10
if x > 5:
pass # 何もしない
else:
print("xは5以下")
10. 例外処理との組み合わせ
if
文はtry-except
ブロックと組み合わせてエラーを防ぐ処理を組み込むこともあります。
x = "10"
if x.isdigit(): # 数字かどうかを確認
x = int(x)
print(x * 2)
else:
print("xは数字ではありません")
出力:
20
forループ
一定回数処理を繰り返したいときはforループを使います。
if文とforループはよく組み合わせせて使うことがあるので、合わせて覚えておきましょう。
a. 基本的なループ
リストやタプルなどのシーケンスの各要素を繰り返し処理します。
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
出力:
apple
banana
cherry
b. range を使ったループ
range
関数で数値の範囲を指定して繰り返します。
for i in range(5):
print(i) # 0から4まで出力
範囲のカスタマイズ:
for i in range(1, 10, 2): # 開始, 終了, ステップ
print(i) # 1, 3, 5, 7, 9
c. インデックス付きループ(enumerate)
リストの要素とインデックスを同時に取得します。
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
出力:
0: apple
1: banana
2: cherry
d. 複数のシーケンスを同時に処理(zip)
複数のリストを同時にループ処理できます。
names = ["太郎", "花子", "次郎"]
ages = [25, 30, 20]
for name, age in zip(names, ages):
print(f"{name}は{age}歳です")
出力:
太郎は25歳です
花子は30歳です
次郎は20歳です
e. リスト内包表記
短いループ処理ならリスト内包表記を使うと簡潔に書けます。
squares = [x**2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]
条件付きリスト内包表記:
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
f. 辞書のループ
辞書のキーや値をループで取得します。
person = {"name": "太郎", "age": 25, "city": "東京"}
for key, value in person.items():
print(f"{key}: {value}")
出力:
name: 太郎
age: 25
city: 東京
g. 逆順のループ
reversed
関数を使うと逆順にループできます。
for i in reversed(range(5)):
print(i) # 4, 3, 2, 1, 0
h. セットのループ
セット(集合)は順序がないため、ランダムな順序で要素がループされます。
colors = {"red", "green", "blue"}
for color in colors:
print(color)
3. if文とforループの組み合わせ
a. 条件付きのループ処理
ループ内でif
文を使って条件をチェックします。
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
print(f"{num}は偶数です")
出力:
2は偶数です
4は偶数です
b. ネストされたループとif
ループの中に別のループと条件文を組み合わせる例です。
for i in range(3):
for j in range(3):
if i == j:
print(f"iとjが等しい: {i}")
出力:
iとjが等しい: 0
iとjが等しい: 1
iとjが等しい: 2
c. 条件付きリスト内包表記
if
文をリスト内包表記の中に組み込むことで、簡潔に条件を適用したリストを作成できます。
squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares) # 偶数のみ二乗する
出力:
[0, 4, 16, 36, 64]
d. ループ終了の制御(break / continue)
break
: ループを途中で終了continue
: その回の処理をスキップして次の繰り返しへ進む
for i in range(5):
if i == 3:
break # ループを終了
print(i)
for i in range(5):
if i == 3:
continue # 3のときだけスキップ
print(i)
出力:
# break の場合
0
1
2
# continue の場合
0
1
2
4
4. その他の応用例
a. else付きのforループ
for
ループがbreak
せずにすべて実行された場合にのみ、else
ブロックが実行されます。
for i in range(5):
if i == 3:
break
else:
print("ループは正常終了")
出力:
# breakされるので何も出力されない
b. 複雑な条件処理
リストの中から特定の条件を満たす要素を抽出する例です。
numbers = [1, 3, 6, 9, 12]
result = [n for n in numbers if n % 3 == 0 and n > 5]
print(result) # [6, 9, 12]
まとめ
Pythonのif
文は以下のように柔軟な条件分岐を実現します:
- 単純な条件分岐(
if
/if-else
/if-elif-else
) - 論理演算子やメンバーシップ演算子の利用
- ワンライナーや三項演算子の活用
- ネストや連結条件の応用
for
ループは基本的な反復処理からインデックス付き、複数シーケンスの同時処理、条件付き反復まで幅広く、両者を組み合わせることで、より柔軟で効率的な処理が可能です。
シンプルな条件分岐から複雑な制御まで対応可能で、さまざまなシチュエーションに対応できます!