Python

제어문 - 반복문

gudwns5533 2026. 5. 27. 17:42

파이썬의 반복문은 특정 코드를 여러 번 실행하기 위해 사용하는 제어문으로, 대표적으로 for문과 while문이 있다.

for문은 리스트, 문자열과 같은 iterable 객체의 요소를 순차적으로 반복할 때 사용되며,

while문은 조건이 True인 동안 계속 실행된다.

또한 break와 continue를 통해 반복 흐름을 제어할 수 있고, 들여쓰기를 통해 반복 범위를 구분하는 것이 특징이다.

while 문

 

while문은 주어진 조건이 참(True)인 동안 반복적으로 코드를 실행하며, 조건이 거짓(False)이 되면 반복을 멈춘다.

while 조건:
    # 조건이 참인 동안 실행될 코드

 

여기서 조건은 평가 결과가 참(True) 또는 거짓(False)이 될 수 있는 표현식.

조건이 참일 때 코드 블록이 실행되며, 코드 블록이 실행된 후에 다시 조건을 검사한다.조건이 여전히 참이라면 코드 블록을 다시 실행하고, 이 과정을 조건이 거짓이 될 때까지 반복한다.

# 커피 자판기 음료수 품절 시

coffee_stock = 10                         # 커피 재고 10잔

while coffee_stock > 0 :
    print(f'커피가 준비되었습니다.')
    coffee_stock -= 1                     # 커피를 한 잔 팔았으니 재고 1 감소
    print(f'남은 재고: {coffee_stock}잔)
   
print('커피 재고가 모두 소진되었습니다. 판매를 종료합니다.')
# 원하는 구구단을 입력받아 해당 단의 구구단을 출력
dan = int(input('원하는 단을 입력하세요: '))
print(f'{dan} 단')

i = 1
while i <= 9:
    print(f'{dan} * {i} = {dan * i}')
    i += 1
for문

 

for문은 시퀀스(리스트, 튜플, 문자열 등)의 각 항목에 대해 반복 작업을 수행하는 반복문이다.

for문은 주로 '지정된 범위 내에서 반복'할 때 사용된다. 이것은 반복할 요소들이 미리 정해져 있는 경우에 유용하다.

# 요소: 반복할 시퀀스의 각 항목이 for 문의 실행 도중에 할당되는 변수
for 요소 in 시퀀스:
    # 요소에 대한 작업 수행 

# 리스트에서 길이가 5 이상인 문자열만 출력
words = ['apple', 'hi', 'banana', 'go', 'mango']

for word in words:
	if (length := len(word)) > 5:
    	print(f'{word} (길이: {length}')
# 보유 스탬프 알림

customer_stamps = [5, 12, 7, 15, 3]      # 손님들이 모든 스탬프 개수

for stamp in customer_stamps:
	if stamp >= 10:
    	print(f'스탬프 {stamp}개 보유 중! VIP 쿠폰 발급 대상입니다.')
    else:
    	print(f'스탬프 {stamp}개 보유 중! 조금만 더 모아보세요!')
range() 함수

 

range() 함수는 파이썬에서 순차적인 정수의 시퀀스를 생성하는 데 사용되는 내장 함수이다. 주로 for 문과 함께 사용되며, 일정한 범위 내에서 반복 작업을 수행할 때 유용하게 활용된다. range() 함수의 결과로 생성되는 순차적인 정수 시퀀스는 실제로 메모리에 저장되지 않고 필요할 때마다 생성되므로, 큰 범위의 반복문에서도 효율적으로 사용할 수 있다.

range([start], stop, [step])

start (선택 사항): 순차적인 범위의 시작 값을 지정한다. 기본값은 0
stop: 순차적인 범위의 끝을 지정한다. 생성된 시퀀스는 stop 값 직전까지의 정수를 포함한다.
step (선택 사항): 순차적인 값을 증가시키는 간격을 지정한다. 기본값은 1
  • range() 함수의 반환값은 range 객체로, 이 객체는 실제 정수 시퀀스를 저장하지 않고 범위 정보만 가지고 있다. 따라서 필요한 정수 시퀀스는 실제 사용 시에 생성된다.
  • range() 함수는 for문이 실행되면서 다음 숫자를 요청할때마다 그때 그때 숫자를 하나씩 생성해주므로 메모리측면과 속도면에서 엄청난 이득을 볼 수 있다.
# for 문을 이용하여 1부터 100까지의 짝수의 총합 구하기
sum = 0
for i in range(0, 101, 2):
    sum += i
    
print(f'1부터 100까지의 짝수의 총합: {sum}')
enumerate() 함수

 

enumerate() 함수는 파이썬에서 반복문을 사용할 때 인덱스와 값을 함께 가져오기 위해 사용되는 내장 함수.

주로 for 문과 함께 사용되며, 반복문 내에서 순서를 추적하면서 값과 해당 값의 인덱스를 함께 사용할 때 유용하다.

enumerate() 함수는 (인덱스, 값)의 튜플을 반환하는 이터레이터(iterator)를 생성한다.

enumerate(iterable, [start=0])
list1 = [10, 20, 30 ,40]

for i, v in enumerate(list1):
    print(f'인덱스:{i}, 값:{v}')
    
# 인덱스:0, 값:10
# 인덱스:1, 값:20
# 인덱스:2, 값:30
# 인덱스:3, 값:40
zip() 함수

 

zip() 함수는 파이썬에서 여러 개의 반복 가능한(iterable) 객체를 병렬적으로 묶어주는 내장 함수.

각 객체로부터 순서대로 하나의 요소씩 가져와 튜플로 묶어주는 이터레이터를 반환한다.

주로 여러 개의 리스트나 튜플을 병렬적으로 처리하고자 할 때 사용된다.

zip(iterable1, iterable2, ...)
li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']

for i in range(0, 3):
    print(li1[i], li2[i])

# 로직상 특별한 이유가 없다면 특정 숫자가 있는건 좋지않은 코드
# (데이터가 변경되면 오류가 생길 가능성이 높음)


li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']

for i in range(len(li1)):           
    print(li1[i], li2[i])

# li1에 의존되어 있기 때문에 이것 역시 좋지못한 코드, li1이 늘어나면 인덱싱오류가 발생


li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']

for l1, l2 in zip(li1, li2):
    print(l1, l2)
    
# 10 apple
# 20 banana
# 30 orange
continue

 

continue문은 파이썬의 반복문(for나 while) 안에서 사용되며, 현재 반복을 즉시 건너뛰고 다음 반복으로 넘어가도록 하는 제어문이다. 즉, continue 아래에 있는 코드는 실행하지 않고 반복문의 처음으로 돌아가 다음 조건을 검사하거나 다음 요소를 처리한다.

예를 들어, 리스트를 순회하면서 특정 값만 건너뛰고 싶을 때 if문과 함께 사용하면 효율적이다. 이를 통해 불필요한 코드 실행을 피하고, 조건에 따라 반복 흐름을 세밀하게 제어할 수 있다.

logs = [
    "INFO: 사용자 로그인 성공",
    "DEBUG: 세션 생성 중",
    "ERROR: 데이터베이스 연결 실패",
    "INFO: 요청 처리 완료",
    "ERROR: 파일 저장 실패",
    "DEBUG: 응답 전송"
]

error_logs = []
# error_logs = ["ERROR: 데이터베이스 연결 실패", "ERROR: 파일 저장 실패"]

for log in logs:     # "INFO" -> "DEBUG" -> "ERROR" -> "INFO" -> "ERROR" -> "DEBUG" 순으로 대입
    # 로그가 ERROR로 시작하지 않으면 건너뛰고 for문으로 돌아감
    if not log.startswith("ERROR"):
        continue
    # ERROR 로그만 리스트에 추가
    error_logs.append(log)

print("오류 로그만 출력:")
for e in error_logs:
    print(e)
    
# 오류 로그만 출력:
# ERROR: 데이터베이스 연결 실패
# ERROR: 파일 저장 실패
break

 

break문은 파이썬의 반복문(for나 while) 안에서 사용되어, 반복을 즉시 종료시키는 제어문.

즉, break가 실행되면 반복문의 조건과 상관없이 해당 반복문을 완전히 빠져나온다.

주로 특정 조건을 만족하면 더 이상 반복을 진행할 필요가 없을 때 사용하며, 예를 들어 사용자 입력에서 '종료'라는 단어를 입력받으면 프로그램을 멈추는 로직 등에 자주 활용된다.

이를 통해 불필요한 반복을 줄이고, 효율적인 프로그램 흐름 제어가 가능하다.

orders = ["마우스", "키보드", "모니터", "그래픽카드", "프린터"]
stock = {"마우스": 10, "키보드": 5, "모니터": 0, "그래픽카드": 2, "프린터": 3}

print("주문 처리 시작")

for item in orders:
    # 재고가 0이면 주문 중단
    if stock[item] == 0:
        print(f"{item} 재고가 없습니다. 주문을 중단합니다.")
        break
    print(f"{item} 주문 완료")

print("주문 프로세스 종료")

# 주문 처리 시작
# 마우스 주문 완료
# 키보드 주문 완료
# 모니터 재고가 없습니다. 주문을 중단합니다.  -> break문에 걸려서 반복문 탈출
# 주문 프로세스 종료
중첩 반복문

 

파이썬에서 중첩된 반복문은 하나의 반복문 안에 다른 반복문이 포함된 구-조를 의미한다.

중첩 반복문은 외부 반복문의 각 반복마다 내부 반복문이 모두 실행되는 방식으로 작동한다.

이를 통해 다차원의 데이터를 처리하거나 복잡한 작업을 수행할 수 있다.

for 외부_변수 in 외부_시퀀스:
    for 내부_변수 in 내부_시퀀스:
    	# 내부 반복문 코드
    # 외부 반복문 코드
# '🎃'를 이용하여 아래와 같은 도형을 만들어보자.
'''
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
'''

for i in range(5):
    for j in range(5):
        print('🎃', end=' ')
    print()
    

'''
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃
🎃 🎃 🎃
🎃 🎃
🎃
'''
for i in range(5):
    for j in range(i, 5):
        print('🎃', end=' ')
    print()
    
    
'''
🎃
🎃 🎃
🎃 🎃 🎃
🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
'''
for i in range(5):
    for j in range(0, i+1):
        print('🎃', end=' ')
    print()
컴프리헨션(Comprehension)

 

컴프리헨션(Comprehension)은 파이썬에서 리스트, 세트, 딕셔너리 등의 컬렉션을 간단하게 생성하거나 변형하는 방법 중 하나이다. 컴프리헨션은 반복문과 조건문을 사용하여 간결하게 컬렉션을 생성하는 기법으로, 코드를 더 간단하고 가독성 좋게 작성할 수 있도록 도와준다.

 

1. 리스트 컴프리헨션

 

리스트 컴프리헨션은 새로운 리스트를 생성하는데 사용된다. 기존 리스트의 각 요소를 반복하면서 조건을 적용하여 새로운 리스트를 생성할 수 있다.

li = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

result = [n for n in li]
print(result)

result = [n*2 for n in li]
print(result)

# [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
# [20, 40, 60, 80, 100, 120, 140, 160, 180, 200]


result = [n for n in range(10) if n % 2 == 0]  
# if문이 for문의 오른쪽에 있는 경우
# range -> if (True / False 여부로 리턴 판단) (True일 경우) -> for
print(result)

# [0, 2, 4, 6, 8]


# 양수는 리스트에 그대로 저장하고, 음수는 0으로 변환해서 저장하기
li = [-1, 0, -4, 24, 5, -10, 2, 20]

result = [n if n>0 else 0 for n in li]
# if문이 for문의 왼쪽에 있는 경우
# for -> if
print(result)

# [0, 0, 0, 24, 5, 0, 2, 20]

 

2. 세트 컴프리헨션

 

세트 컴프리헨션은 새로운 세트를 생성하는데 사용된다. 기존 세트의 각 요소를 반복하면서 조건을 적용하여 새로운 세트를 생성할 수 있다.

li = [1, 2, 3, 4, 5, 2, 3, 4]
unique_numbers = set(li)
print(unique_numbers)

li = [1, 2, 3, 4, 5, 2, 3, 4]
unique_numbers = {x for x in li}
print(unique_numbers)

# {1, 2, 3, 4, 5}
# {1, 2, 3, 4, 5}

 

3. 딕셔너리 컴프리헨션

 

딕셔너리 컴프리헨션은 새로운 딕셔너리를 생성하는데 사용된다. 기존 딕셔너리의 키와 값을 반복하면서 조건을 적용하여 새로운 딕셔너리를 생성할 수 있다.

names = ['apple', 'banana', 'orange']
name_lengths = {name:len(name) for name in names}    # key: value
print(name_lengths)

# {'apple': 5, 'banana': 6, 'orange': 6}

'Python' 카테고리의 다른 글

사용자 정의 함수 part1  (0) 2026.05.28
이터러블(Iterable)과 이터레이터(Iterator)  (0) 2026.05.27
제어문 - 조건문  (1) 2026.05.27
컬렉션 타입 (딕셔너리)  (0) 2026.05.26
컬렉션 타입 (세트)  (0) 2026.05.26