Python - ネストされたループ

こんにちは、志望プログラマーの皆さん!今日は、Pythonのネストされたループについて深く掘り下げます。あなたの親しみのある近所のコンピュータ先生として、この旅を案内することができて嬉しいです。信じてください、このレッスンの終わりまでに、あなたはプロのようにループを使えるようになるでしょう!

Python - Nested Loops

ネストされたループとは?

深いところまで飛び込む前に、基本的にはどういたしまして。クローゼットを整理するときを想像してみてください。あなたは各棚(それが1つのループです)を1つずつ見て、その棚にあるすべてのアイテム(最初のループの中に別のループです)を整理します。それは、プログラミングでのネストされたループの基本的な考え方です - ループの中にループがあります!

Pythonのネストされたforループ

では、forループから始めましょう。それはPythonの世界で信頼性のある古い友のようなものです。

基本的な構造

以下は、ネストされたforループの一般的な構造です:

for outer_variable in outer_sequence:
# 外側のループの本体
for inner_variable in inner_sequence:
# 内側のループの本体

簡単な例:掛け算表

これをより理解しやすくするために、簡単な掛け算表を作成しましょう:

for i in range(1, 6):
for j in range(1, 6):
print(f"{i} x {j} = {i*j}", end="\t")
print()  # 各行の後に改行

このコードは以下のような出力をします:

1 x 1 = 1    1 x 2 = 2    1 x 3 = 3    1 x 4 = 4    1 x 5 = 5
2 x 1 = 2    2 x 2 = 4    2 x 3 = 6    2 x 4 = 8    2 x 5 = 10
3 x 1 = 3    3 x 2 = 6    3 x 3 = 9    3 x 4 = 12   3 x 5 = 15
4 x 1 = 4    4 x 2 = 8    4 x 3 = 12   4 x 4 = 16   4 x 5 = 20
5 x 1 = 5    5 x 2 = 10   5 x 3 = 15   5 x 4 = 20   5 x 5 = 25

これを分解してみましょう:

  1. 外側のループ(for i in range(1, 6))は5回実行され、行を表します。
  2. 外側のループの各反復に対して、内側のループ(for j in range(1, 6))は5回実行され、列を表します。
  3. 各掛け算の結果を出力し、end="\t"を使用して改行の代わりにタブスペースを追加します。
  4. 各行(外側のループの反復)の後に空行を追加して次の行に移動します。

実世界の例:席の配置

あなたが先生(私のように!)でクラスの席を配置していると想像してみてください。以下に席配置表を作成しましょう:

students = ["Alice", "Bob", "Charlie", "David", "Eve"]
rows = 3
seats_per_row = 2

seat_number = 0
for row in range(1, rows + 1):
print(f"Row {row}:")
for seat in range(1, seats_per_row + 1):
if seat_number < len(students):
print(f"  Seat {seat}: {students[seat_number]}")
seat_number += 1
else:
print(f"  Seat {seat}: Empty")
print()  # 行間の空行

これは以下のような出力をします:

Row 1:
Seat 1: Alice
Seat 2: Bob

Row 2:
Seat 1: Charlie
Seat 2: David

Row 3:
Seat 1: Eve
Seat 2: Empty

この例では:

  1. 外側のループは各行を反復します。
  2. 内側のループは各行に学生を席に割り当てます。
  3. seat_number変数を使用して、次に割り当てる学生を追跡します。
  4. 学生が足りなくなった場合、残りの席を「Empty」にします。

Pythonのネストされたwhileループ

次に、whileループのいとこ、ネストされたwhileループに会いましょう。それは、条件を確認し続ける見張りのようなものです。

基本的な構造

以下は、ネストされたwhileループの一般的な構造です:

while outer_condition:
# 外側のループの本体
while inner_condition:
# 内側のループの本体

例:数字のピラミッド

ネストされたwhileループを動作するために、数字のピラミッドを作成しましょう:

row = 1
while row <= 5:
col = 1
while col <= row:
print(col, end=" ")
col += 1
print()  # 次の行に移動
row += 1

これは以下のような出力をします:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

これを分解してみましょう:

  1. 外側のwhileループは、行数(1から5)を制御します。
  2. 各行に対して、内側のwhileループは1から現在の行数までの数字を出力します。
  3. colを内側のループでインクリメントし、rowを外側のループでインクリメントします。

実世界の例:在庫チェック

あなたが小さな店を管理していると想像してみてください。定期的に在庫を確認する必要があります。以下にネストされたwhileループを使用してそのシミュレーションを行います:

inventory = {
"apples": 50,
"bananas": 30,
"oranges": 40
}

days = 1
while days <= 3:  # 3日間チェック
print(f"Day {days} Inventory Check:")
for fruit, quantity in inventory.items():
while quantity > 0:
print(f"Checking {fruit}...")
quantity -= 10  # 各チェックで10個売る
if quantity <= 20:
print(f"Low stock alert for {fruit}! Only {quantity} left.")
break  # 在庫が少ない場合はこの果物のチェックを停止
inventory[fruit] = quantity  # 在庫を更新
print(f"End of Day {days} Inventory: {inventory}\n")
days += 1

これは以下のような出力をします:

Day 1 Inventory Check:
Checking apples...
Checking apples...
Checking apples...
Low stock alert for apples! Only 20 left.
Checking bananas...
Low stock alert for bananas! Only 20 left.
Checking oranges...
Checking oranges...
Low stock alert for oranges! Only 20 left.
End of Day 1 Inventory: {'apples': 20, 'bananas': 20, 'oranges': 20}

Day 2 Inventory Check:
Checking apples...
Low stock alert for apples! Only 10 left.
Checking bananas...
Low stock alert for bananas! Only 10 left.
Checking oranges...
Low stock alert for oranges! Only 10 left.
End of Day 2 Inventory: {'apples': 10, 'bananas': 10, 'oranges': 10}

Day 3 Inventory Check:
Checking apples...
Low stock alert for apples! Only 0 left.
Checking bananas...
Low stock alert for bananas! Only 0 left.
Checking oranges...
Low stock alert for oranges! Only 0 left.
End of Day 3 Inventory: {'apples': 0, 'bananas': 0, 'oranges': 0}

この例では:

  1. 外側のwhileループは、3日間在庫をチェックすることをシミュレーションします。
  2. forループを使用して在庫の各果物を反復します。
  3. 内側のwhileループは、各果物をチェックし、売ることをシミュレーションします。在庫が20以下になった場合はチェックを停止します。
  4. 在庫を更新します。

結論

おめでとうございます!あなたは今やPythonでのネストされたループの達人になりました。覚えておいてください、ネストされたループは強力なツールですが、効率的に使用しないとスローになることがあります。

すべてのプログラミングの概念と同様に、実践は完璧にするためのものです。独自のネストされたループのシナリオを作成してみてください - 例えば、チェスボードのセットアップや週次の学校スケジュールなど。可能性は限りありません!

コーディングを続け、学び続け、そしてそれを楽しんでください!次回まで、あなたの親しみのある近所のコンピュータ先生として、さようなら。楽しいループを続けてください!

Credits: Image by storyset