텍스트 기반 메뉴 만들기
콘솔에서 메뉴 고르는 재미! 텍스트 기반 메뉴 만들기
이전 글에서 간단한 계산기까지 만들었죠. 거기까지 오면 사실 “계산기 = 입력받고 결과 출력” 정도로 끝나는데요…
이번엔 한 단계 더 가봅니다. “메뉴”를 만들어서 사용자가 번호로 기능을 고르게 하는 프로그램! 나름 게임 UI 느낌도 나고, 콘솔 프로그램이 갑자기 살아나는 느낌이 있어요. 어? 이런 거 좋아하잖아!
우리가 만들 프로그램은 이런 느낌
- 프로그램 시작
- 메뉴 출력
- 사용자가
1~5같은 번호 입력 - 선택한 기능 실행
- 다시 메뉴로 돌아가기
0입력하면 종료
딱 이 흐름이 핵심이에요.
그리고 이걸 만들기 위해서 이번엔 반복문 + 조건문을 같이 써볼 거예요.
(솔직히 말하면, 이 조합이 제일 “프로그램 같아지는” 순간입니다.)
전체 흐름(큰 그림)부터 잡아보기
나름 순서만 딱 잡으면 코드가 훨씬 편해져요.
- 무한 반복(또는 종료 전까지 반복)
- 메뉴 보여주기
- 입력 받기
- 입력값에 따라 조건 분기하기
0이면 반복문 빠져나가기(종료)
여기서 “무한 반복”은 보통 이런 느낌이에요.
while True:같은 걸 쓰면 무한히 돕니다.- 대신
0을 입력하면break로 빠져나오면 돼요.
예제 코드: 텍스트 기반 메뉴 만들기
아래 코드는 계산 기능(이전 글 연장) + 간단한 부가 기능을 메뉴로 묶은 버전이에요.
처음부터 완벽할 필요 없고, “이게 돌아간다!”가 중요합니다.
실패담 하나: 예전에
break를 빼먹어서… 종료가 안 되어서 한참 당황했었어요. 콘솔이 “계속 도는 중”일 때 진짜 멘붕 오거든요. 지금은 그 실수 안 하자 우리!
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
# 0으로 나누기 방지
if b == 0:
return "0으로 나눌 수 없어요!"
return a / b
while True:
print("\n=== 메뉴 선택 ===")
print("1. 더하기")
print("2. 빼기")
print("3. 곱하기")
print("4. 나누기")
print("0. 종료")
choice = input("번호를 입력하세요: ").strip()
if choice == "0":
print("프로그램을 종료할게요. 안녕!")
break
# 메뉴 선택이 1~4일 때만 숫자 입력 받기
if choice in ["1", "2", "3", "4"]:
try:
x = float(input("첫 번째 숫자: ").strip())
y = float(input("두 번째 숫자: ").strip())
if choice == "1":
result = add(x, y)
elif choice == "2":
result = sub(x, y)
elif choice == "3":
result = mul(x, y)
else: # choice == "4"
result = div(x, y)
print(f"결과: {result}")
except ValueError:
print("숫자를 입력해야 해요! 예: 1, 2.5 같은 거")
else:
print("그 번호는 메뉴에 없어요. 1~4 또는 0을 입력해보세요!")
코드가 어떻게 동작하는지, 한 줄씩 “친구처럼” 설명
1) while True:로 계속 반복
- 사용자가 종료(
0)를 누를 때까지 계속 메뉴를 보여줘야 하니까요. break를 만나면 멈춥니다.
2) choice = input(...).strip()
- 입력에 공백이 섞이면 비교가 꼬여요.
- 그래서
strip()으로 앞뒤 공백을 제거합니다. - “이거 왜 안 되지?”할 때, 사실 입력 공백 문제인 경우 꽤 많아요.
3) 조건문으로 메뉴 분기
if choice == "0":→ 종료choice in ["1","2","3","4"]→ 계산 입력 받기- 나머지 → 잘못된 번호 안내
4) try-except로 입력 실수 방지
여기가 진짜 실전이에요.
- 사용자가
1,2가 아니라abc를 입력하면float()에서 에러가 나거든요. - 그래서
try안에서 숫자 변환을 하고, ValueError면 친절하게 안내합니다.
나름 개발자들이 “이 정도는 기본”으로 넣는 부분이에요. 사실은 이게 프로그램 신뢰도를 올려줘요. 솔직히 말하면, 예외 처리 없으면 사용자 입장에선 너무 빡세거든요.
여기서 한 번 더 업그레이드하고 싶다면? (미니 숙제)
다음 단계로 자연스럽게 이어지려면, “작게 추가”해보는 게 좋아요. 예를 들면:
- 메뉴에
5. 제곱하기추가하기 4. 나누기에서 나눗셈 결과가 문자열이면(0으로 나누기) “안내 문구”처럼 출력되게 유지하기- 입력된 메뉴 번호가 숫자인지 검사 더 깔끔하게 하기
예를 들어 “제곱하기”는 elif choice == "5": 같은 줄 하나 더 넣고 함수 하나 추가하면 끝입니다. 어렵지 않죠? 그냥 조금만 확장해보는 거예요.
다음 글(5-5) 예고: 입출력 프로젝트 완성하기
자, 지금은 “메뉴로 기능을 고르는 구조”를 만들었고요.
다음 5-5에서는 이걸 바탕으로 입출력 프로젝트를 완성해봅니다.
- 사용자 입력을 더 그럴듯하게 처리하고
- 파일/저장까지 이어질 수도 있고(시리즈 흐름상 다음 단계에서 자연스럽게 등장해요)
- 최종적으로 “완성된 작은 프로그램” 느낌을 만들어갈 거예요.
솔직히 말하면, 여기서부터는 ‘그냥 따라치기’보다 내가 원하는 형태로 고치는 재미가 본격적으로 시작돼요.
다음 글에서 그 재미 제대로 이어갈게요!





