はじめに
Python基礎構文シリーズ第3回は「ループ処理」です。同じ処理を繰り返し実行する方法を学びます。
forループ
基本的な使い方
リストやタプルの要素を1つずつ処理します。
fruits = ["りんご", "みかん", "バナナ"]
for fruit in fruits:
print(fruit)
# 出力:
# りんご
# みかん
# バナナ
range関数
指定した回数だけ繰り返します。
# 0から4まで(5回)
for i in range(5):
print(i)
# 0, 1, 2, 3, 4
# 1から5まで
for i in range(1, 6):
print(i)
# 1, 2, 3, 4, 5
# 0から10まで2刻み
for i in range(0, 11, 2):
print(i)
# 0, 2, 4, 6, 8, 10
enumerate関数
インデックスと要素を同時に取得できます。
fruits = ["りんご", "みかん", "バナナ"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# 出力:
# 0: りんご
# 1: みかん
# 2: バナナ
# 開始番号を指定
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")
# 出力:
# 1: りんご
# 2: みかん
# 3: バナナ
辞書のループ
user = {"name": "太郎", "age": 25, "city": "東京"}
# キーのループ
for key in user:
print(key)
# キーと値のループ
for key, value in user.items():
print(f"{key}: {value}")
# 値のみ
for value in user.values():
print(value)
zip関数
複数のリストを同時にループします。
names = ["太郎", "花子", "次郎"]
ages = [25, 22, 30]
for name, age in zip(names, ages):
print(f"{name}は{age}歳です")
# 出力:
# 太郎は25歳です
# 花子は22歳です
# 次郎は30歳です
whileループ
条件が真の間、繰り返します。
count = 0
while count < 5:
print(count)
count += 1
# 出力:
# 0, 1, 2, 3, 4
無限ループに注意
# 無限ループ(避けるべき)
# while True:
# print("永遠に続く")
# 適切な終了条件を設定
count = 0
while True:
print(count)
count += 1
if count >= 5:
break # ループを抜ける
break文
ループを途中で終了します。
for i in range(10):
if i == 5:
break # iが5になったらループを抜ける
print(i)
# 出力:
# 0, 1, 2, 3, 4
# 検索処理の例
numbers = [1, 3, 5, 7, 9, 10, 11]
for num in numbers:
if num % 2 == 0: # 偶数を見つけたら
print(f"最初の偶数: {num}")
break
continue文
現在の繰り返しをスキップして次に進みます。
for i in range(5):
if i == 2:
continue # iが2のときはスキップ
print(i)
# 出力:
# 0, 1, 3, 4
# 奇数のみを処理
for num in range(10):
if num % 2 == 0: # 偶数はスキップ
continue
print(num)
# 出力:
# 1, 3, 5, 7, 9
else句(ループ)
ループが正常に完了した場合に実行されます。
for i in range(5):
print(i)
else:
print("ループが完了しました")
# 出力:
# 0, 1, 2, 3, 4
# ループが完了しました
break でループを抜けた場合は else は実行されません。
for i in range(5):
if i == 3:
break
print(i)
else:
print("この行は実行されません")
# 出力:
# 0, 1, 2
ネストされたループ
ループの中にループを書くことができます。
# 九九の表
for i in range(1, 10):
for j in range(1, 10):
print(f"{i * j:3}", end="")
print() # 改行
ネストされたループからのbreak
# 外側のループも抜けたい場合
found = False
for i in range(3):
for j in range(3):
if i == 1 and j == 1:
found = True
break
if found:
break
# または関数を使う方法
def find_item():
for i in range(3):
for j in range(3):
if i == 1 and j == 1:
return (i, j)
return None
result = find_item()
リスト内包表記
ループを1行で書く方法です。
# 通常のforループ
squares = []
for i in range(5):
squares.append(i ** 2)
print(squares) # [0, 1, 4, 9, 16]
# リスト内包表記
squares = [i ** 2 for i in range(5)]
print(squares) # [0, 1, 4, 9, 16]
# 条件付き
even_squares = [i ** 2 for i in range(10) if i % 2 == 0]
print(even_squares) # [0, 4, 16, 36, 64]
実践例
数値の合計
numbers = [10, 20, 30, 40, 50]
total = 0
for num in numbers:
total += num
print(f"合計: {total}") # 合計: 150
# 組み込み関数を使う方が簡潔
print(sum(numbers)) # 150
ユーザー入力を繰り返し受け付ける
while True:
answer = input("続けますか? (yes/no): ")
if answer.lower() == "no":
print("終了します")
break
print("処理を続行...")
まとめ
forはリストや範囲を繰り返すwhileは条件が真の間繰り返すrange(n)で0からn-1までenumerate()でインデックスと要素を同時に取得zip()で複数のリストを同時にループbreakでループを終了continueで現在の繰り返しをスキップ- リスト内包表記で簡潔に書ける
次回は「関数」について学びます。