입출력 프로젝트 완성하기
5-5. 입출력 프로젝트 완성하기: “작은 시스템”을 끝내보자!
이제 5단원에서 거의 다 왔어.
콘솔 입력/출력으로 메시지 띄우고, 조건에 따라 분기하고, 간단한 계산기랑 텍스트 메뉴도 만들어봤지? (5-4까지 진짜 재밌게 달렸을 거라 믿는다!)
이번엔 그걸 한 번에 합쳐서 “간단한 시스템” 형태의 프로그램을 완성할 거야.
솔직히 말하면, 이런 걸 만들 때 제일 짜릿해. “아, 내가 드디어 프로그램을 한 덩어리로 만들었구나!” 같은 느낌이 딱 옴.
오늘 목표
- 사용자 입력을 받아서
- 메뉴를 보여주고
- 선택에 따라 작업을 수행하고
- 종료까지 깔끔하게 처리하기
그리고 제일 중요: 실제로 한 번 “돌려보는 것”.
내가 만든 프로젝트: 미니 “똑똑한 콘솔” 시스템
구성은 이런 느낌이야:
- 메뉴 출력
- 사용자 입력 받기
- 입력에 따라 기능 실행
- 다시 메뉴로 돌아가기
0누르면 종료
예시 기능(5단원에서 배운 걸 재활용):
- 간단 계산기: 덧셈/뺄셈/곱셈/나눗셈
- 입력한 문장에 인사 출력하기
- 나이(숫자) 입력받아서 구간 출력하기 (예: 미성년/성년 느낌)
- 종료
음… 사실 이렇게 “기능이 엄청 대단하진” 않아. 근데 입출력 흐름을 완성하는 게 오늘의 핵심이야.
전체 코드 (그냥 그대로 따라 쳐도 됨)
아래 코드는 “반복해서 메뉴 보여주기” + “입력값 처리”를 중심으로 만들었어.
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()
실행 예시(대충 이런 흐름 나와야 정상!)
==== 미니 시스템 메뉴 ====
1) 간단 계산기
2) 인사 출력
3) 나이 구간 확인
0) 종료
===========================
메뉴 번호를 선택하세요: 2
[인사]
이름을 입력하세요: 철수
안녕, 철수! 오늘도 화이팅!
아! 그리고 여기서 중요한 건 프로그램이 바로 끝나지 않고 계속 메뉴로 돌아간다는 거야.
이게 진짜 “입출력 프로젝트 완성” 느낌이지.
“오류”도 해결하고 끝내기 (나의 실패담 한 스푼)
솔직히 말하면, 나도 처음에 이거 만들다가 이런 걸로 몇 번 얼었어:
- 메뉴는 잘 뜨는데 입력을 숫자로 기대했다가 문자 받으면 에러남
- 나눗셈에서 0 입력하면 터짐
while True빼먹어서 한 번 하고 종료됨…- 함수로 나눠놓고 호출을 안 해서 “왜 아무 반응이 없지?” 하고 한참 봄ㅋㅋ
근데 이건 다 정상 루틴이야.
그래서 이번 프로젝트에는:
try/except로 숫자 변환 실패 방어- 나눗셈 0 처리
- 잘못된 메뉴 입력 처리
이런 작은 방어 장치도 넣었어.
이제 다음 장에서도 이런 “실수 처리 감각”이 계속 이어져.
오늘 만든 결과물 체크리스트
- [ ] 메뉴가 계속 나온다
- [ ] 선택에 따라 다른 동작이 실행된다
- [ ] 숫자 입력 실수해도 너무 망가지지 않는다
- [ ] 0을 누르면 종료된다
이거 다 되면, 너는 지금 진짜 “작동하는 프로그램”을 만든 거야.
다음 글 예고: 6-1. 프로그램 기획하기
자, 이제 5-5를 끝냈으니…
다음 단계는 감이 좀 더 확 살아나.
바로 6-1. 프로그램 기획하기야.
코드를 “짜기 전에” 머릿속에서 어떤 동작이 필요할지 정리하는 거지.
솔직히 말하면, 처음엔 그냥 막 만들고 나중에 “아 이거 왜 이렇게 됐지?” 하는 경우가 많거든.
근데 기획부터 하면, 나중에 확 줄어. 진짜로.
다음 글에서, 내가 같이 따라할 수 있게 간단한 기획 템플릿도 준비해볼게!





