반응형
프로그래밍에서 같은 작업을 여러 번 반복해야 할 때가 있습니다. 예를 들어, 1부터 100까지 숫자를 출력하거나, 사용자가 올바른 값을 입력할 때까지 계속 입력을 받는 경우 말이죠. 이런 상황에서 while문이 매우 유용합니다.
while문이란 무엇인가요?
while문은 특정 조건이 참인 동안 코드를 반복 실행하는 제어문입니다. 마치 "~하는 동안 계속해"라는 명령어와 같습니다.
while문의 기본 구조
while 조건:
실행할_코드1
실행할_코드2
실행할_코드3
조건이 참(True)인 동안 들여쓰기된 코드들이 계속 반복됩니다.
기본 예제: 카운트 다운
간단한 카운트 다운 프로그램을 만들어보겠습니다.
# 5부터 1까지 카운트 다운
count = 5 # 시작 숫자 설정
while count > 0: # count가 0보다 큰 동안 반복
print(f"{count}초 남았습니다!") # 현재 카운트 출력
count = count - 1 # count를 1씩 감소
print("시간 종료!") # 반복이 끝나면 실행
실행 결과:
5초 남았습니다!
4초 남았습니다!
3초 남았습니다!
2초 남았습니다!
1초 남았습니다!
시간 종료!
실전 예제: 풍선 터뜨리기 게임
아이들이 좋아할 만한 풍선 터뜨리기 게임을 만들어보겠습니다.
# 풍선 터뜨리기 게임
balloon_count = 0 # 터뜨린 풍선 개수
while balloon_count < 7: # 7개 미만일 동안 반복
balloon_count = balloon_count + 1 # 풍선 하나 터뜨림
print(f"풍선을 {balloon_count}개 터뜨렸어요! 펑!")
if balloon_count == 7: # 7개를 모두 터뜨렸을 때
print("모든 풍선을 터뜨렸어요! 축하합니다!")
실행 결과:
풍선을 1개 터뜨렸어요! 펑!
풍선을 2개 터뜨렸어요! 펑!
풍선을 3개 터뜨렸어요! 펑!
풍선을 4개 터뜨렸어요! 펑!
풍선을 5개 터뜨렸어요! 펑!
풍선을 6개 터뜨렸어요! 펑!
풍선을 7개 터뜨렸어요! 펑!
모든 풍선을 터뜨렸어요! 축하합니다!
사용자 입력받기: 간단한 메뉴 시스템
# 간단한 애완동물 관리 메뉴
menu = """
1. 밥주기
2. 산책하기
3. 놀아주기
4. 끝내기
번호를 선택하세요: """
choice = 0 # 선택 번호 초기화
while choice != 4: # 4번을 선택하지 않는 동안 반복
print(menu) # 메뉴 출력
choice = int(input()) # 사용자 입력받기
if choice == 1:
print("애완동물에게 맛있는 밥을 주었어요!")
elif choice == 2:
print("애완동물과 즐거운 산책을 했어요!")
elif choice == 3:
print("애완동물과 신나게 놀아주었어요!")
elif choice == 4:
print("애완동물 관리를 마칩니다. 안녕!")
else:
print("올바른 번호를 선택해주세요!")
break문: 반복문 탈출하기
때로는 특정 조건에서 반복문을 즉시 중단해야 할 때가 있습니다. 이때 break문을 사용합니다.
# 과자 자판기 시뮬레이션
snack_count = 8 # 과자 개수
money = 500 # 가진 돈
while money > 0: # 돈이 있는 동안 반복
print("과자를 하나 샀어요! 맛있어요!")
snack_count = snack_count - 1 # 과자 하나 감소
money = money - 100 # 돈 100원 감소
print(f"남은 과자: {snack_count}개, 남은 돈: {money}원")
if snack_count == 0: # 과자가 다 떨어지면
print("과자가 모두 떨어졌어요! 판매를 멈춥니다.")
break # 반복문 즉시 종료
print("자판기 이용이 끝났습니다!")
실제 자판기 프로그램
# 음료수 자판기 프로그램
drink_count = 5 # 음료수 개수
while True: # 무한 반복
print(f"\n=== 음료수 자판기 ===")
print(f"남은 음료수: {drink_count}개")
money = int(input("돈을 넣어주세요 (200원, 0을 입력하면 종료): "))
if money == 0: # 0을 입력하면 종료
print("이용해주셔서 감사합니다!")
break
elif money == 200: # 정확한 금액
print("시원한 음료수를 드립니다!")
drink_count = drink_count - 1
elif money > 200: # 많이 넣었을 때
change = money - 200 # 거스름돈 계산
print(f"거스름돈 {change}원과 음료수를 드립니다!")
drink_count = drink_count - 1
else: # 돈이 부족할 때
print("돈이 부족해요. 돈을 돌려드립니다.")
continue # 다시 처음으로
if drink_count == 0: # 음료수가 다 떨어지면
print("음료수가 모두 떨어졌습니다. 판매를 종료합니다.")
break
continue문: 반복문의 처음으로 돌아가기
continue문은 현재 반복을 건너뛰고 다음 반복으로 넘어갑니다.
# 1부터 15까지 숫자 중 3의 배수만 출력하기
number = 0
while number < 15: # 15보다 작은 동안 반복
number = number + 1 # 숫자 증가
if number % 3 != 0: # 3의 배수가 아니면
continue # 다음 반복으로 건너뛰기
print(f"{number}은 3의 배수입니다!")
실행 결과:
3은 3의 배수입니다!
6은 3의 배수입니다!
9은 3의 배수입니다!
12은 3의 배수입니다!
15은 3의 배수입니다!
무한 루프 활용하기
무한 루프는 프로그램이 계속 실행되어야 할 때 사용합니다.
# 간단한 계산기 프로그램
print("간단한 계산기입니다!")
print("종료하기: quit 입력")
while True: # 무한 반복
print("\n--- 새로운 계산 ---")
command = input("계산을 입력하세요 (예: 5 + 3): ")
if command.lower() == 'quit': # quit 입력시 종료
print("계산기를 종료합니다. 안녕히가세요!")
break
try: # 오류 처리
result = eval(command) # 계산 실행
print(f"결과: {result}")
except: # 오류가 발생하면
print("올바른 계산식을 입력해주세요!")
중첩 while문: 구구단 만들기
# 2단부터 5단까지 구구단 출력
dan = 2 # 시작 단
while dan <= 5: # 5단까지 반복
print(f"\n=== {dan}단 ===")
num = 1 # 곱할 숫자 초기화
while num <= 9: # 9까지 반복
result = dan * num # 곱셈 계산
print(f"{dan} × {num} = {result}")
num = num + 1 # 다음 숫자
dan = dan + 1 # 다음 단
실용적인 예제: 숫자 맞추기 게임
# 숫자 맞추기 게임
import random # 랜덤 숫자 생성을 위한 모듈
secret_number = random.randint(1, 20) # 1~20 사이 랜덤 숫자
attempts = 0 # 시도 횟수
max_attempts = 5 # 최대 시도 횟수
print("숫자 맞추기 게임!")
print(f"1부터 20 사이의 숫자를 맞춰보세요! (기회: {max_attempts}번)")
while attempts < max_attempts: # 최대 시도 횟수까지
attempts = attempts + 1 # 시도 횟수 증가
guess = int(input(f"\n{attempts}번째 시도: "))
if guess == secret_number: # 정답을 맞췄을 때
print(f"축하합니다! {attempts}번만에 맞추셨어요!")
print(f"정답은 {secret_number}이었습니다!")
break
elif guess < secret_number: # 추측이 작을 때
print("더 큰 숫자예요!")
else: # 추측이 클 때
print("더 작은 숫자예요!")
remaining = max_attempts - attempts # 남은 기회
if remaining > 0:
print(f"남은 기회: {remaining}번")
if attempts == max_attempts and guess != secret_number: # 기회를 다 썼을 때
print(f"\n아쉽네요! 정답은 {secret_number}이었습니다!")
print("다시 도전해보세요!")
while문과 리스트 활용하기
# 쇼핑 리스트 관리 프로그램
shopping_list = [] # 빈 쇼핑 리스트
while True: # 무한 반복
print("\n=== 쇼핑 리스트 관리 ===")
print("1. 물건 추가")
print("2. 물건 삭제")
print("3. 리스트 보기")
print("4. 종료")
choice = input("선택하세요: ")
if choice == "1": # 물건 추가
item = input("추가할 물건: ")
shopping_list.append(item) # 리스트에 추가
print(f"'{item}'이 추가되었습니다!")
elif choice == "2": # 물건 삭제
if len(shopping_list) == 0: # 리스트가 비어있으면
print("삭제할 물건이 없습니다!")
else:
print("현재 리스트:", shopping_list)
item = input("삭제할 물건: ")
if item in shopping_list: # 물건이 리스트에 있으면
shopping_list.remove(item) # 삭제
print(f"'{item}'이 삭제되었습니다!")
else:
print("해당 물건이 리스트에 없습니다!")
elif choice == "3": # 리스트 보기
if len(shopping_list) == 0: # 리스트가 비어있으면
print("쇼핑 리스트가 비어있습니다!")
else:
print("\n현재 쇼핑 리스트:")
index = 1 # 순서 번호
while index <= len(shopping_list): # 리스트 크기만큼 반복
print(f"{index}. {shopping_list[index-1]}")
index = index + 1
elif choice == "4": # 종료
print("쇼핑 리스트 관리를 종료합니다!")
break
else:
print("올바른 번호를 선택해주세요!")
while문 사용시 주의사항
1. 무한 루프 방지
조건이 언젠가는 거짓이 될 수 있도록 해야 합니다.
# 잘못된 예 - 무한 루프
count = 1
while count < 10:
print(count)
# count를 증가시키지 않음 - 무한 루프!
# 올바른 예
count = 1
while count < 10:
print(count)
count = count + 1 # 조건 변경
2. 변수 초기화
while문에서 사용할 변수는 미리 초기화해야 합니다.
# 변수를 먼저 초기화
counter = 0
while counter < 3:
print(f"반복 {counter + 1}번째")
counter = counter + 1
3. 조건 확인
while문의 조건이 올바른지 항상 확인하세요.
# 올바른 조건 설정 예제
password = "" # 빈 문자열로 초기화
while password != "1234": # 올바른 비밀번호가 아닌 동안
password = input("비밀번호를 입력하세요: ")
if password == "1234":
print("로그인 성공!")
else:
print("비밀번호가 틀렸습니다. 다시 시도하세요.")
응용 예제: 성적 관리 시스템
# 학생 성적 관리 시스템
student_scores = {} # 빈 딕셔너리
while True:
print("\n=== 성적 관리 시스템 ===")
print("1. 학생 성적 입력")
print("2. 학생 성적 조회")
print("3. 전체 성적 보기")
print("4. 평균 계산")
print("5. 종료")
menu = input("메뉴를 선택하세요: ")
if menu == "1": # 성적 입력
name = input("학생 이름: ")
score = int(input("성적: "))
student_scores[name] = score # 딕셔너리에 저장
print(f"{name} 학생의 성적 {score}점이 저장되었습니다!")
elif menu == "2": # 성적 조회
name = input("조회할 학생 이름: ")
if name in student_scores: # 학생이 등록되어 있으면
print(f"{name} 학생의 성적: {student_scores[name]}점")
else:
print("등록되지 않은 학생입니다!")
elif menu == "3": # 전체 성적 보기
if len(student_scores) == 0: # 등록된 학생이 없으면
print("등록된 학생이 없습니다!")
else:
print("\n=== 전체 학생 성적 ===")
for name in student_scores: # 딕셔너리 순회
print(f"{name}: {student_scores[name]}점")
elif menu == "4": # 평균 계산
if len(student_scores) == 0:
print("등록된 학생이 없습니다!")
else:
total = 0 # 총합 초기화
count = 0 # 학생 수 초기화
for score in student_scores.values(): # 성적들만 가져오기
total = total + score # 총합에 더하기
count = count + 1 # 학생 수 증가
average = total / count # 평균 계산
print(f"전체 평균: {average:.1f}점")
elif menu == "5": # 종료
print("성적 관리 시스템을 종료합니다!")
break
else:
print("올바른 메뉴를 선택해주세요!")
정리
while문은 조건이 참인 동안 코드를 반복 실행하는 매우 유용한 도구입니다. 주요 특징을 정리하면:
- 조건 확인: while문은 매 반복마다 조건을 확인합니다
- break문: 반복문을 즉시 종료할 때 사용합니다
- continue문: 현재 반복을 건너뛰고 다음 반복으로 넘어갑니다
- 무한 루프: while True:를 사용하여 무한 반복할 수 있습니다
- 변수 초기화: while문에서 사용할 변수는 미리 초기화해야 합니다
반응형
'파이썬' 카테고리의 다른 글
12. 파이썬 함수 기초부터 응용까지 한번에 끝내기. (0) | 2025.05.29 |
---|---|
11. 파이썬 반복문 완전 정복 - for문 기초부터 응용까지 (0) | 2025.05.27 |
9. 파이썬 조건문 (IF문) 완벽히 이해하기. 예제로 배우는 코딩공부. (0) | 2025.05.27 |
8. 파이썬 변수와 메모리 관리 완벽 가이드 (0) | 2025.05.26 |
7. 파이썬 불린(Boolean) 자료형에 대해서 공부하기 (0) | 2025.05.26 |