입출력 프로젝트 완성하기

in #krsuccessyesterday

5-5. 입출력 프로젝트 완성하기: “작은 시스템”을 끝내보자!

mwitt1337

이제 5단원에서 거의 다 왔어.
콘솔 입력/출력으로 메시지 띄우고, 조건에 따라 분기하고, 간단한 계산기랑 텍스트 메뉴도 만들어봤지? (5-4까지 진짜 재밌게 달렸을 거라 믿는다!)

이번엔 그걸 한 번에 합쳐서 “간단한 시스템” 형태의 프로그램을 완성할 거야.
솔직히 말하면, 이런 걸 만들 때 제일 짜릿해. “아, 내가 드디어 프로그램을 한 덩어리로 만들었구나!” 같은 느낌이 딱 옴.

Sunriseforever


오늘 목표

  • 사용자 입력을 받아서
  • 메뉴를 보여주고
  • 선택에 따라 작업을 수행하고
  • 종료까지 깔끔하게 처리하기

그리고 제일 중요: 실제로 한 번 “돌려보는 것”.

Pexels


내가 만든 프로젝트: 미니 “똑똑한 콘솔” 시스템

구성은 이런 느낌이야:

  1. 메뉴 출력
  2. 사용자 입력 받기
  3. 입력에 따라 기능 실행
  4. 다시 메뉴로 돌아가기
  5. 0 누르면 종료

예시 기능(5단원에서 배운 걸 재활용):

    1. 간단 계산기: 덧셈/뺄셈/곱셈/나눗셈
    1. 입력한 문장에 인사 출력하기
    1. 나이(숫자) 입력받아서 구간 출력하기 (예: 미성년/성년 느낌)
    1. 종료

음… 사실 이렇게 “기능이 엄청 대단하진” 않아. 근데 입출력 흐름을 완성하는 게 오늘의 핵심이야.

Michael_Kastelic


전체 코드 (그냥 그대로 따라 쳐도 됨)

아래 코드는 “반복해서 메뉴 보여주기” + “입력값 처리”를 중심으로 만들었어.

def show_menu():
    print("\n==== 미니 시스템 메뉴 ====")
    print("1) 간단 계산기")
    print("2) 인사 출력")
    print("3) 나이 구간 확인")
    print("0) 종료")
    print("===========================")


def calculator():
    print("\n[계산기]")

    a = float(input("첫 번째 숫자를 입력하세요: "))
    op = input("연산자를 입력하세요 (+, -, *, /): ").strip()
    b = float(input("두 번째 숫자를 입력하세요: "))

    if op == "+":
        result = a + b
    elif op == "-":
        result = a - b
    elif op == "*":
        result = a * b
    elif op == "/":
        # 0으로 나누면 에러가 나니까 안전장치 추가
        if b == 0:
            print("0으로 나눌 수 없어요! (나름 안전하게 처리함)")
            return
        result = a / b
    else:
        print("지원하지 않는 연산자예요. (+, -, *, / 중에서만 골라줘요)")
        return

    print(f"결과: {a} {op} {b} = {result}")


def greet():
    print("\n[인사]")
    name = input("이름을 입력하세요: ").strip()
    if not name:
        print("이름을 비워두면… 좀 곤란해요 😅")
        return
    print(f"안녕, {name}! 오늘도 화이팅!")


def age_check():
    print("\n[나이 구간 확인]")
    age_text = input("나이를 입력하세요(숫자): ").strip()

    # 나이 입력이 숫자가 아닐 수도 있잖아? 그래서 방어 코드를 넣었어.
    try:
        age = int(age_text)
    except ValueError:
        print("숫자 형식으로 입력해줘야 해요! 예: 20")
        return

    if age < 0:
        print("나이가 음수는… 음… 불가능합니다! 😵")
    elif age < 20:
        print("미성년 구간입니다.")
    elif age < 60:
        print("성인 구간입니다.")
    else:
        print("시니어 구간입니다.")


def main():
    while True:
        show_menu()
        choice = input("메뉴 번호를 선택하세요: ").strip()

        if choice == "1":
            calculator()
        elif choice == "2":
            greet()
        elif choice == "3":
            age_check()
        elif choice == "0":
            print("프로그램을 종료합니다. 잘가! 👋")
            break
        else:
            print("그 번호는 없어요. 0~3 중에 골라줘요!")


if __name__ == "__main__":
    main()

Michael_Kastelic


실행 예시(대충 이런 흐름 나와야 정상!)

==== 미니 시스템 메뉴 ====
1) 간단 계산기
2) 인사 출력
3) 나이 구간 확인
0) 종료
===========================
메뉴 번호를 선택하세요: 2
[인사]
이름을 입력하세요: 철수
안녕, 철수! 오늘도 화이팅!

아! 그리고 여기서 중요한 건 프로그램이 바로 끝나지 않고 계속 메뉴로 돌아간다는 거야.
이게 진짜 “입출력 프로젝트 완성” 느낌이지.


“오류”도 해결하고 끝내기 (나의 실패담 한 스푼)

솔직히 말하면, 나도 처음에 이거 만들다가 이런 걸로 몇 번 얼었어:

  • 메뉴는 잘 뜨는데 입력을 숫자로 기대했다가 문자 받으면 에러남
  • 나눗셈에서 0 입력하면 터짐
  • while True 빼먹어서 한 번 하고 종료됨…
  • 함수로 나눠놓고 호출을 안 해서 “왜 아무 반응이 없지?” 하고 한참 봄ㅋㅋ

근데 이건 다 정상 루틴이야.
그래서 이번 프로젝트에는:

  • try/except로 숫자 변환 실패 방어
  • 나눗셈 0 처리
  • 잘못된 메뉴 입력 처리
    이런 작은 방어 장치도 넣었어.

이제 다음 장에서도 이런 “실수 처리 감각”이 계속 이어져.

Sunriseforever


오늘 만든 결과물 체크리스트

  • [ ] 메뉴가 계속 나온다
  • [ ] 선택에 따라 다른 동작이 실행된다
  • [ ] 숫자 입력 실수해도 너무 망가지지 않는다
  • [ ] 0을 누르면 종료된다

이거 다 되면, 너는 지금 진짜 “작동하는 프로그램”을 만든 거야.


다음 글 예고: 6-1. 프로그램 기획하기

자, 이제 5-5를 끝냈으니…
다음 단계는 감이 좀 더 확 살아나.

바로 6-1. 프로그램 기획하기야.
코드를 “짜기 전에” 머릿속에서 어떤 동작이 필요할지 정리하는 거지.

솔직히 말하면, 처음엔 그냥 막 만들고 나중에 “아 이거 왜 이렇게 됐지?” 하는 경우가 많거든.
근데 기획부터 하면, 나중에 확 줄어. 진짜로.

다음 글에서, 내가 같이 따라할 수 있게 간단한 기획 템플릿도 준비해볼게!