← 파이썬 강의 목록으로
🧮
실습 프로젝트 (Practice) · ★
메뉴 + 결과 누적 + 이력

Lv1 · CLI 계산기

메뉴 선택형 사칙연산 계산기. 결과를 누적해 다음 계산에 사용할 수 있고, 종료 시 전체 이력을 출력합니다.

함수메뉴예외
소요 시간
1~2시간
난이도
📊 기초 응용
선수 조건
🎯 기초 4, 9주차
결과물
함수 매핑(dict)과 람다 활용

이 강의에서 배우는 것

  • 1연산자별 함수를 dict 로 매핑한다
  • 20 나누기 예외를 처리한다
  • 3이전 결과 재사용 옵션을 구현한다

프로젝트 개요

  • 메뉴: 1.+ 2.- 3.* 4./ 5.이전 결과 사용 6.종료
  • 0 나누기 예외 처리 + 친절한 메시지
  • 종료 시 전체 이력 한 번에 출력

요구사항

  • OPS dict 에 (기호, 함수) 매핑
  • history 리스트에 모든 연산 누적
  • 직전 결과를 변수에 저장 → '이전결과 사용' 옵션

도전 과제

  • ** (제곱), % (나머지) 추가
  • 수식 문자열 직접 파싱 (eval 금지)

채점 체크리스트

  • 0 나누기 안전
  • 이전 결과 재사용
  • 이력 출력

💻 예제 (examples)

실제로 실행해 결과를 확인할 수 있는 예제 코드입니다.

solution.py전체 동작 코드
CODE
"""CLI 계산기 — 메뉴형 + 결과 누적"""

OPS = {
    "1": ("+", lambda a, b: a + b),
    "2": ("-", lambda a, b: a - b),
    "3": ("*", lambda a, b: a * b),
    "4": ("/", lambda a, b: a / b if b != 0 else None),
}

def main():
    history = []
    last = None
    while True:
        print("\n[메뉴] 1.+ 2.- 3.* 4./ 5.이전결과 사용 6.종료")
        choice = input("선택: ").strip()
        if choice == "6":
            break
        if choice not in OPS:
            print("잘못된 선택"); continue
        try:
            if last is not None and input(f"첫 번째 수 (이전 결과 {last}): ").strip() == "":
                a = last
            else:
                a = float(input("첫 번째 수: "))
            b = float(input("두 번째 수: "))
        except ValueError:
            print("숫자만 입력"); continue

        symbol, fn = OPS[choice]
        result = fn(a, b)
        if result is None:
            print("0으로 나눌 수 없습니다")
            continue
        print(f"결과: {a} {symbol} {b} = {result}")
        history.append(f"{a} {symbol} {b} = {result}")
        last = result

    print("\n[연산 이력]")
    for h in history:
        print(f"  {h}")

if __name__ == "__main__":
    main()
▶ 실행 결과
[메뉴] 1.+ 2.- 3.* 4./ 5.이전결과 사용 6.종료
선택: 1
첫 번째 수: 3
두 번째 수: 4
결과: 3.0 + 4.0 = 7.0
선택: 6

[연산 이력]
  3.0 + 4.0 = 7.0

📝 과제 (exercises)

직접 풀어보고, 막힐 때 정답을 펼쳐 비교해보세요.

과제 1

프로젝트 구현

목표: 위 사양대로 직접 작성한다.

요구사항
  • OPS dict + 람다
  • 0 나누기 처리
  • 이력 출력
💡 힌트

lambda a, b: a / b if b != 0 else None

입출력 예시
결과: 3.0 + 4.0 = 7.0
채점
  • · 메뉴 동작
  • · 예외 안전
정답 코드 펼치기 / 접기
SOLUTION
# 위 solution.py 와 동일
▶ 실행 결과
(예제 참고)
예제 코드 / 강의 자료

전체 강의 자료와 예제 코드는 GitHub에서 자유롭게 받아볼 수 있습니다.

GitHub에서 보기 ↗