ループの制御とネストを学ぼう
学習の目標
本章では、以下の内容を学習します。
- break文を使ってループから抜け出す方法を理解する
- continue文を使って次の繰り返しにスキップする方法を習得する
- ネストしたループ(ループの中にループ)の基本構造を学ぶ
- 二重ループを使った基本的なパターン表示を理解する
はじめに
これまでにfor文とwhile文を使った繰り返し処理を学びました。しかし、実際のプログラムでは「特定の条件でループを途中で終了したい」や「特定の場合だけ処理をスキップしたい」といった、より柔軟な制御が必要になることがあります。
また、「繰り返しの中でさらに繰り返し処理を行いたい」という場面もあります。例えば、九九の表を全て表示したい場合、1の段から9の段まで繰り返し、それぞれの段で1×1から1×9まで繰り返す必要があります。
今回は、このような複雑な繰り返し処理を実現するための機能を学んでいきましょう。
break文でループから抜ける
break文は、ループを途中で終了させるための命令です。for文でもwhile文でも使用できます。
VS Codeでbreak_example.py
というファイルを作成し、以下のコードを入力してください。
# 1から10まで表示するが、5で止める
print("1から10まで数えますが、5で止めます:")
for i in range(1, 11):
if i == 5:
print("5に到達したので終了します")
break
print(i)
print("ループ終了")
このプログラムでは、i
が5になった時点でbreak
文が実行され、ループから抜け出します。
実行すると、以下のような結果が表示されます。
1から10まで数えますが、5で止めます:
1
2
3
4
5に到達したので終了します
ループ終了
i
が5になった時点でループが終了し、6以降は表示されていないことがわかります。
while文でのbreak文の使い方も見てみましょう。同じファイルに以下を追加してください。
# while文でのbreak使用例
print("\nwhile文でのbreak:")
count = 1
while True: # 無限ループ
if count > 3:
print("3を超えたので終了")
break
print(f"カウント: {count}")
count = count + 1
print("while文終了")
実行結果は以下のようになります。
while文でのbreak:
カウント: 1
カウント: 2
カウント: 3
3を超えたので終了
while文終了
while True:
で無限ループを作っていますが、break
文によって適切なタイミングで終了しています。
continue文で次の繰り返しへ
continue文は、現在の繰り返しの残りの処理をスキップして、次の繰り返しに進む命令です。ループ自体は終了せず、条件に合う場合のみ処理を飛ばします。
VS Codeでcontinue_example.py
というファイルを作成し、以下のコードを入力してください。
# 1から10まで表示するが、偶数はスキップ
print("1から10まで表示(偶数はスキップ):")
for i in range(1, 11):
if i % 2 == 0: # 偶数の場合
continue # 以下の処理をスキップして次の繰り返しへ
print(i)
print("ループ終了")
この例では、i % 2 == 0
(iを2で割った余りが0)で偶数を判定し、偶数の場合はcontinue
文でprint(i)
をスキップしています。
実行すると、以下のような結果が表示されます。
1から10まで表示(偶数はスキップ):
1
3
5
7
9
ループ終了
偶数(2, 4, 6, 8, 10)が表示されず、奇数だけが表示されていることがわかります。
while文でのcontinue文も見てみましょう。同じファイルに以下を追加してください。
# while文でのcontinue使用例
print("\nwhile文でのcontinue:")
count = 0
while count < 5:
count = count + 1
if count == 3:
print("3はスキップします")
continue
print(f"処理: {count}")
print("while文終了")
実行結果は以下のようになります。
while文でのcontinue:
処理: 1
処理: 2
3はスキップします
処理: 4
処理: 5
while文終了
count
が3の時だけ「処理: 3」が表示されず、「3はスキップします」のメッセージの後、すぐに次の繰り返し(count=4)に進んでいます。
breakとcontinueの使い分け
breakとcontinueの違いを明確にするため、同じ条件で比較してみましょう。
VS Codeでbreak_vs_continue.py
というファイルを作成し、以下のコードを入力してください。
# breakの場合
print("breakの場合:")
for i in range(1, 6):
if i == 3:
print("3でループを終了")
break
print(i)
print("break後の処理")
print("\ncontinueの場合:")
for i in range(1, 6):
if i == 3:
print("3をスキップ")
continue
print(i)
print("continue後の処理")
実行すると、以下のような結果が表示されます。
breakの場合:
1
2
3でループを終了
break後の処理
continueの場合:
1
2
3をスキップ
4
5
continue後の処理
breakは3でループ全体が終了するため、4と5は表示されません。一方、continueは3の処理だけをスキップして、4と5は正常に表示されています。
ネストしたループの基本
ネストしたループとは、ループの中にさらにループを書くことです。外側のループが1回実行される度に、内側のループが完全に実行されます。
VS Codeでnested_loop_basic.py
というファイルを作成し、以下のコードを入力してください。
# 二重ループの基本例
print("二重ループの基本:")
for i in range(1, 4): # 外側のループ: 1, 2, 3
print(f"外側のループ: {i}")
for j in range(1, 4): # 内側のループ: 1, 2, 3
print(f" 内側のループ: {j}")
print() # 空行を入れて見やすくする
このプログラムでは、外側のループが1回実行される度に、内側のループが3回実行されます。
実行すると、以下のような結果が表示されます。
二重ループの基本:
外側のループ: 1
内側のループ: 1
内側のループ: 2
内側のループ: 3
外側のループ: 2
内側のループ: 1
内側のループ: 2
内側のループ: 3
外側のループ: 3
内側のループ: 1
内側のループ: 2
内側のループ: 3
外側のループが1回実行される度に、内側のループが完全に実行されていることがわかります。全体では外側3回×内側3回=9回の処理が行われています。
二重ループでパターンを作る
ネストしたループを使って、簡単なパターンを表示してみましょう。
VS Codeでpattern_display.py
というファイルを作成し、以下のコードを入力してください。
# 星印のパターン表示
print("星印のパターン:")
for row in range(1, 4): # 行数: 1, 2, 3
for star in range(row): # 星の数: row回
print("*", end="") # 改行せずに表示
print() # 行の終わりで改行
この例では、1行目に1個、2行目に2個、3行目に3個の星を表示します。print("*", end="")
のend=""
は、改行をしないで表示するための指定です。
実行すると、以下のような結果が表示されます。
星印のパターン:
*
**
***
もう少し複雑なパターンも作ってみましょう。同じファイルに以下を追加してください。
# 数字の表パターン
print("\n数字の表パターン:")
for i in range(1, 4): # 行: 1, 2, 3
for j in range(1, 4): # 列: 1, 2, 3
print(f"{i}×{j}={i*j}", end=" ") # 掛け算の結果を表示
print() # 行の終わりで改行
実行結果は以下のようになります。
数字の表パターン:
1×1=1 1×2=2 1×3=3
2×1=2 2×2=4 2×3=6
3×1=3 3×2=6 3×3=9
これは九九の表の一部を表示するパターンです。外側のループが行(掛けられる数)、内側のループが列(掛ける数)を表しています。
ネストしたループでのbreak
ネストしたループでbreak文を使う場合、どのループから抜けるかに注意が必要です。
VS Codeでnested_break.py
というファイルを作成し、以下のコードを入力してください。
# ネストしたループでのbreak
print("内側のループでbreak:")
for i in range(1, 4): # 外側のループ
print(f"外側: {i}")
for j in range(1, 6): # 内側のループ
if j == 3:
print(" 内側のループをbreak")
break # 内側のループのみ終了
print(f" 内側: {j}")
print(" 外側のループは継続")
print()
この例では、内側のループでj
が3になったときにbreak
が実行されます。しかし、これは内側のループのみを終了し、外側のループは継続されます。
実行すると、以下のような結果が表示されます。
内側のループでbreak:
外側: 1
内側: 1
内側: 2
内側のループをbreak
外側のループは継続
外側: 2
内側: 1
内側: 2
内側のループをbreak
外側のループは継続
外側: 3
内側: 1
内側: 2
内側のループをbreak
外側のループは継続
内側のループは毎回j=3
で終了していますが、外側のループは最後まで実行されていることがわかります。
まとめ
本章では、ループの制御とネストについて学習しました。 理解できた内容は以下の通りです。
- break文はループを途中で終了させる
- continue文は現在の繰り返しをスキップして次に進む
- ネストしたループでは外側のループが1回実行される度に内側のループが完全に実行される
- ネストしたループでのbreak文は、その文が書かれたループのみを終了する
- 二重ループを使うことで表形式のデータやパターンを表示できる
これらの機能を使うことで、より複雑で柔軟な繰り返し処理が書けるようになりました。特にネストしたループは、表形式のデータを扱う場面や、複雑なパターンを作成する場面で重要な概念です。
次回は、関数の基本概念について学んでいきましょう。
Starterプランでより詳しく学習
この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。