プログラミングにおいて、同じ処理を何度も繰り返す「ループ(繰り返し)」は非常に重要な概念です。
Pythonでは主に for ループと while ループという二種類の繰り返し構文が用意されています。
本記事では、初心者の方を対象に、それぞれの基本的な使い方から実践的な活用例までを解説します。最後には演習問題も用意しましたので、ぜひ手を動かして理解を深めてください。
forループとは
基本構文
変数は、シーケンス(例: リスト、タプル、文字列)から要素を一つずつ取り出して格納します。
for 変数 in シーケンス:
処理
シーケンスは、繰り返し可能なデータ構造全般を指します。
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
上記コードでは、fruits の要素 “apple”, “banana”, “cherry” が順番に fruit に入り、print されます。
rangeを使った繰り返し
数値を指定回数繰り返したい場合は組み込み関数 range() を使います。
range(5) は 0,1,2,3,4 の整数列を生成します。
for i in range(5):
print(i)
range(開始, 終了) や range(開始, 終了, ステップ) という書き方も可能です。
for i in range(1, 6, 2):
print(i) # 1, 3, 5
応用例:リスト内包表記
データの加工と繰り返しを同時に行いたい場合、内包表記(list comprehension)が便利です。
numbers = [1, 2, 3, 4, 5]
squared = [n**2 for n in numbers]
print(squared) # [1, 4, 9, 16, 25]
内包表記は可読性も高く、簡潔に書けるため頻繁に使われます。
whileループとは
基本構文
条件式 が True の間、処理を繰り返します。
while 条件式:
処理
下記では、 count が 0 から 4 まで順に出力されます。
count = 0
while count < 5:
print(count)
count += 1
無限ループに注意
while True: のように常に True になる条件を書くと無限ループになります。終了条件や break 文を必ず設けましょう。
while True:
text = input("終了するには 'exit' と入力してください: ")
if text == "exit":
break
print("ループ終了")
breakとcontinue
breakは、ループを即座に抜けます。
continueは、そのイテレーション(繰り返し)の残りをスキップし、次の繰り返しへ進みます。
for i in range(1, 11):
if i % 2 == 0:
continue # 偶数はスキップ
if i > 7:
break # 7を超えたら終了
print(i) # 1, 3, 5, 7
forループとwhileループの使い分け
ループ種別 | 特徴 | 主な用途 |
---|---|---|
for | シーケンス(リストや文字列など)の要素を順番に処理。回数があらかじめ分かっている場合に便利。 | リスト・タプルの走査、回数制御 |
while | 条件式が成立する限り繰り返す。終了条件が動的に変化する場合や、回数が事前に確定しない場合に向いている。 | ユーザー入力待ち、動的条件下での繰り返し |
実践的な活用例
入れ子ループ(ネスト)
2次元リストや多重ループの処理に入れ子ループを使います。
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for num in row:
print(num, end=" ")
print()
リスト内要素の削除時の注意
for ループ中にリストを直接削除するとインデックスずれが起こるため注意が必要です。安全策として新しいリストを生成します。
numbers = [1, 2, 3, 4, 5]
filtered = [n for n in numbers if n % 2 != 0] # 奇数だけ抽出
print(filtered) # [1, 3, 5]
まとめ
- for ループはシーケンスの要素を順に処理するときに使う。
- while ループは条件を満たす限り繰り返し、回数が不定の繰り返し処理に向く。
- break / continue を駆使して、ループの制御を柔軟に行える。
- 内包表記やネストを組み合わせることで、より効率よくコードを記述できる。
これらの基本を押さえたうえで、自分のプロジェクトや演習問題を通じて実際に手を動かすことが上達への近道です。
演習問題
以下の問題に挑戦し、学んだループの知識を定着させましょう。
- 問題1:「1〜100」の整数のうち、3の倍数だけを出力するプログラムを for ループで作成してください。
- 問題2:ユーザーから整数を入力させ、入力された数の階乗(factorial)を while ループで計算するプログラムを書いてください。
- 問題3:文字列を逆順に出力するプログラムを、for ループとスライス([::-1])の両方で作成し、違いをコメントで説明してください。
解答例
# 解答1: 3の倍数をforループで出力
for i in range(1, 101):
if i % 3 == 0:
print(i)
# 解答2: 階乗をwhileループで計算
n = int(input("整数を入力してください: "))
result = 1
count = 1
while count <= n:
result *= count
count += 1
print(f"{n} の階乗は {result} です")
# 解答3-1: forループを使う方法
s = "Hello, Python!"
reversed_s = ""
for ch in s:
reversed_s = ch + reversed_s
print(reversed_s)
# 解答3-2: スライスを使う方法
s = "Hello, Python!"
print(s[::-1])
# コメント:
# forループ版は文字を一つずつ取り出して先頭に追加する方式、
# スライス版は組み込みのシーケンス操作で簡潔に記述できる。
以上で「Pythonで繰り返し(forループ、whileループ)」の入門編は完了です。
ぜひこの記事を参考に、自分でコードを書いて挙動を確かめながら習得を進めてください!