Python - 중첩 루프

안녕하세요, 자신을 위한 프로그래머 여러분! 오늘은 Python에서 중첩 루프의 흥미로운 세계에 몸을 던지기 위해相聚하겠습니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 이 여정을 안내해 드리게 되어 기쁩니다. 믿어주십시오, 이 수업이 끝날 때까지 여러분은 프로처럼 루프를 돌아갈 것입니다!

Python - Nested Loops

중첩 루프는 무엇인가요?

깊은 물 속으로 뛰어들기 전에, 기본에 대해 알아보겠습니다. 여러분의 옷장을 정리하는 것을 상상해보십시오. 여러분은 각 셀프를 돌아보며 (이것은 한 번의 루프입니다), 각 셀프마다 그 위의 모든 물품을 정리합니다 (이것은 첫 번째 루프 안에 또 다른 루프입니다). 이것이 프로그래밍에서 중첩 루프의 본질입니다 - 루프 안에 또 다른 루프!

Python 중첩 for 루프

for 루프부터 시작해보겠습니다. Python의 세상에서 for 루프는 신뢰할 수 있는 오래된 친구와 같습니다.

기본 구조

다음은 중첩 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:
# 내부 루프 본문

예제: 숫자 Piramid

중첩 while 루프를 액션으로 볼 수 있도록 숫자 Piramid를 만들어보겠습니다:

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 루프는 각 과일을 점검하고 판매하며 재고가 부족하거나 소진될 때까지 계속합니다.
  4. 재고가 20개 이하로 떨어지면 해당 과일 점검을 중단합니다.

결론

축하합니다! 여러분은 Python에서 중첩 루프의 예술을 마스터했습니다. 중첩 루프는 강력한 도구지만, 지혜롭게 사용하시기 바랍니다. 효율적으로 사용하지 않으면 여러분의 코드가 느려질 수 있습니다.

모든 프로그래밍 개념과 마찬가지로, 연습이 완벽의 열쇠입니다. 여러분만의 중첩 루프 시나리오를 만들어보세요 - 체스 보드 설정이나 주간 학교 일정 같은 것들입니다. 가능성은 끝없습니다!

코딩을 계속하고, 계속 배우며, 가장 중요한 것은 여러분이 즐기는 것입니다! 다음 번에 다시 만나요, 여러분의 친절한 이웃 컴퓨터 교사가 바이봉하며. 즐거운 루프를!

Credits: Image by storyset