텍스트 기반 메뉴 만들기

in #krsuccess19 hours ago

콘솔에서 메뉴 고르는 재미! 텍스트 기반 메뉴 만들기

이전 글에서 간단한 계산기까지 만들었죠. 거기까지 오면 사실 “계산기 = 입력받고 결과 출력” 정도로 끝나는데요…
이번엔 한 단계 더 가봅니다. “메뉴”를 만들어서 사용자가 번호로 기능을 고르게 하는 프로그램! 나름 게임 UI 느낌도 나고, 콘솔 프로그램이 갑자기 살아나는 느낌이 있어요. 어? 이런 거 좋아하잖아!

Pexels


우리가 만들 프로그램은 이런 느낌

  • 프로그램 시작
  • 메뉴 출력
  • 사용자가 1~5 같은 번호 입력
  • 선택한 기능 실행
  • 다시 메뉴로 돌아가기
  • 0 입력하면 종료

딱 이 흐름이 핵심이에요.
그리고 이걸 만들기 위해서 이번엔 반복문 + 조건문을 같이 써볼 거예요.
(솔직히 말하면, 이 조합이 제일 “프로그램 같아지는” 순간입니다.)

GuentherDillingen

jwvein


전체 흐름(큰 그림)부터 잡아보기

나름 순서만 딱 잡으면 코드가 훨씬 편해져요.

  1. 무한 반복(또는 종료 전까지 반복)
  2. 메뉴 보여주기
  3. 입력 받기
  4. 입력값에 따라 조건 분기하기
  5. 0이면 반복문 빠져나가기(종료)

여기서 “무한 반복”은 보통 이런 느낌이에요.

  • while True: 같은 걸 쓰면 무한히 돕니다.
  • 대신 0을 입력하면 break로 빠져나오면 돼요.

예제 코드: 텍스트 기반 메뉴 만들기

아래 코드는 계산 기능(이전 글 연장) + 간단한 부가 기능을 메뉴로 묶은 버전이에요.
처음부터 완벽할 필요 없고, “이게 돌아간다!”가 중요합니다.

실패담 하나: 예전에 break를 빼먹어서… 종료가 안 되어서 한참 당황했었어요. 콘솔이 “계속 도는 중”일 때 진짜 멘붕 오거든요. 지금은 그 실수 안 하자 우리!

jplenio

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을 입력해보세요!")

Pexels


코드가 어떻게 동작하는지, 한 줄씩 “친구처럼” 설명

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에서는 이걸 바탕으로 입출력 프로젝트를 완성해봅니다.

  • 사용자 입력을 더 그럴듯하게 처리하고
  • 파일/저장까지 이어질 수도 있고(시리즈 흐름상 다음 단계에서 자연스럽게 등장해요)
  • 최종적으로 “완성된 작은 프로그램” 느낌을 만들어갈 거예요.

솔직히 말하면, 여기서부터는 ‘그냥 따라치기’보다 내가 원하는 형태로 고치는 재미가 본격적으로 시작돼요.
다음 글에서 그 재미 제대로 이어갈게요!