Python: 반복문

Ryung Hoh·2026년 8월 25일
for, while, enumerate(), zip()

Life is short, therefore we need python.
인생은 짧다. 그러므로 우리는 파이썬이 필요하다.

오늘 다룰 내용은 우리들의 시간을 단축해 줄 소중한 문법입니다.
반복문 입니다.

오늘은 for과 while 문법을 배우고, 리스트에서 enumerate와 zip을 사용하는 법을 배웠습니다.

1. for

medicines = ["소화제", "소염진통제", "항생제", "해열제"]
print(f"{medicines[0]}을 식후에 복용하세요")
print(f"{medicines[1]}을 식후에 복용하세요")
print(f"{medicines[2]}을 식후에 복용하세요")
print(f"{medicines[3]}을 식후에 복용하세요")
# ⚠️ 약에 100개라면 100번 반복해야 합니다.

😭 반복은 힘들죠. for을 사용합시다.

medicines = ["소화제", "소염진통제", "항생제", "해열제"]
for med in medicines:
	print(f"{med}을 식후에 복용하세요")
# ✅ 약이 100개라도 코드는 3줄이면 됩니다.

2. enumerate() & range() & zip()

2.1 enumerate()

enumerate(iterable, start)

iterable(이터러블): 자신의 멤버를 한 번에 하나씩 반환할 수 있는 객체입니다. 이터러블의 예로는 모든 시퀀스 타입(list, str, tuple 등)과 dict, 파일 객체 같은 일부 비(非)시퀀스 타입, 그리고 iter() 메서드를 정의하거나 시퀀스 시맨틱(sequence semantics)을 구현한 getitem() 메서드를 정의한 사용자 정의 클래스의 객체가 있습니다.

start: 숫자입니다. 객체의 인덱스 시작 번호를 지정하며 기본값은 0입니다.

patient_list = [
    ("Ryan", "Endocrinology"), 				#0
    ("Frodo", "Opthalmology"), 				#1
    ("Neo", "Cardiology"),					#2
    ("Tube", "Pediatrics"),					#3
    ("Apeach", "Dermatology"),				#4
    ("Muzi", "Otolaryngology(ENT)"),		#5
    ("Con", "Immunology"),					#6
    ("Jay-G", "Rehabilitation-Medicine"),	#7
]

print("=== 카카오프렌즈 대기 현황 ===")
for num, (name, dept) in enumerate(patient_list):
	print(f"{num:1d}번 대기 | {name} → {dept}" )

=== 카카오프렌즈 대기 현황 ===
0번 대기 | Ryan → Endocrinology
1번 대기 | Frodo → Opthalmology
2번 대기 | Neo → Cardiology
3번 대기 | Tube → Pediatrics
4번 대기 | Apeach → Dermatology
5번 대기 | Muzi → Otolaryngology(ENT)
6번 대기 | Con → Immunology
7번 대기 | Jay-G → Rehabilitation-Medicine

라이언이 0번 대기로 시작하네요! 인덱스 기본값은 0이기 때문입니다. 라이언의 번호를 1번으로 만들어봅시다.

print("=== 카카오프렌즈 대기 현황 ===")
for num, (name, dept) in enumerate(patient_list, 1):
	print(f"{num:1d}번 대기 | {name} → {dept}" )

=== 카카오프렌즈 대기 현황 ===
1번 대기 | Ryan → Endocrinology
2번 대기 | Frodo → Opthalmology
3번 대기 | Neo → Cardiology
4번 대기 | Tube → Pediatrics
5번 대기 | Apeach → Dermatology
6번 대기 | Muzi → Otolaryngology(ENT)
7번 대기 | Con → Immunology
8번 대기 | Jay-G → Rehabilitation-Medicine

2.2 range()

range(start, stop, step)

start: (선택) 시작할 위치를 정수(int)로 나타냅니다. 기본값은 0입니다.
stop: (필수) 종료할 위치를 정수(int)로 나타냅니다.
step: (선택) 한 번에 증가시킬 값을 정수(int)로 나타냅니다. 기본값은 1입니다.

지난 시간에 배웠듯이 start의 값은 포함하고, stop의 값은 포함하지 않습니다.

x = range(6, 3, -1)
# 시작값 6부터 종료값 3까지 1씩 감소
for n in x:
  print(n)

결과는 6 5 4 입니다.

range 함수를 활용해 병실 점검 완료 메시지도 만들 수 있습니다.

for room in range(1001, 1008):
	print(f"{room}호 병실 점검 완료")

1001호 병실 점검 완료
1002호 병실 점검 완료
1003호 병실 점검 완료
1004호 병실 점검 완료
1005호 병실 점검 완료
1006호 병실 점검 완료
1007호 병실 점검 완료

2.3 zip()

zip(iterator1, iterator2, iterator3 ...)

아래 예시를 통해 이해해 봅시다.

it1 = (1, 2, 3)
it2 = ("a", "b", "c")
it3 = ("가", "나", "다")

print("=== zip 결과 ===")
for it1, it2, it3 in zip(it1, it2, it3):
    print(f"{it1}-{it2}-{it3}")

=== zip 결과 ===
1-a-가
2-b-나
3-c-다

즉 3개의 다른 변수의 값들의 첫 번째, 두 번째, 세 번째 요소를 묶어서 하나의 문장으로 만들 수 있습니다.

우리들의 건강한 친구들, 카카오 프렌즈에게는 미안합니다.
이름, 병명, 진료과를 연결해서 다음과 같은 문장을 만들 수 있습니다.

names = ["Ryan", "Frodo", "Neo", "Tube", "Apeach", "Muzi", "Con", "Jay-G"]
disease = ["Diabetes", "dacryocystitis", "arrhythmia", "fever", "psoriasis", "Patulous Eustachian tube", "Arthritis", "disc-herniations"]
depts = ["Endocrinology", "Opthalmology", "Cardiology", "Pediatrics", "Dermatology", "Otolaryngology(ENT)", "Immunology", "Rehabilitation-Medicine"]

print("=== 카카오프렌즈 진료정보 ===")
for name, disease, depts in zip(names, disease, depts):
	print(f"{name} has {disease} go to {depts}")

=== 카카오프렌즈 진료정보 ===
Ryan has Diabetes go to Endocrinology
Frodo has dacryocystitis go to Opthalmology
Neo has arrhythmia go to Cardiology
Tube has fever go to Pediatrics
Apeach has psoriasis go to Dermatology
Muzi has Patulous Eustachian tube go to Otolaryngology(ENT)
Con has Arthritis go to Immunology
Jay-G has disc-herniations go to Rehabilitation-Medicine

zip(반복자1, 반복자2, 반복자3, strict = True)
만약 세 반복자의 원소 개수가 모두 같은지 확인하고 싶다면
strict = True를 zip 마지막에 추가해볼 수 있다.

아래 1번과 2번 반복자의 원소는 8개이지만, 3번 반복자는 7개입니다.
모든 반복자의 원소가 1대1 대응이 되는지를 확인해봅시다.

iterator1 = [1, 2, 3, 4, 5, 6, 7, 8]
iterator2 = ["a", "b", "C", "d", "e", "f", "g", "h"]
iterator3 = ["가", "나", "다", "라", "마", "바", "사"]
#len(iterator1) = 8
#len(iterator2) = 8
#len(iterator3) = 7
zip(iterator1, iterator2, iterator3, strict=True)
for iterator1, iterator2, iterator3 in zip(iterator1, iterator2, iterator3, strict=True):
    print(f"{iterator1}-{iterator2}-{iterator3}")

1-a-가
2-b-나
3-C-다
4-d-라
5-e-마
6-f-바
7-g-사

ValueError Traceback (most recent call last)
/tmp/ipykernel_696/743129088.py in <cell line: 0>()
7 zip(iterator1, iterator2, iterator3, strict=True)
8
----> 9 for iterator1, iterator2, iterator3 in zip(iterator1, iterator2, iterator3, strict=True):
10 print(f"{iterator1}-{iterator2}-{iterator3}")
ValueError: zip() argument 3 is shorter than arguments 1-2

zip의 3번 인자가 1번과 2번 인자에 비해 짧아 오류가 납니다. 따라서 strict=True일 경우 반복자 각각의 원소 개수가 같아야지만 오류가 나지 않습니다.

3. while

profile
국제협력업무 바탕으로 의료AI 커리어 도전!

0개의 댓글