본문 바로가기
지식을 알아가는 시간 지식을 알아가는 시간

파이썬으로 간단한 계산기 만들기: 입력, 조건문, 예외 처리 한 번에 연습하기

읽는 시간 약 7분

지난 글에서 try-except로 오류를 처리하는 방법을 정리했어요. 이번에는 그 내용을 활용해서 파이썬 계산기 만들기에 도전해 볼게요. 작은 프로그램이지만 입력받기, 조건문, 함수, 반복문, 예외 처리가 전부 들어가서 연습용으로 아주 좋아요.

이번 글에서 만들 것

  • 숫자 두 개와 연산자(+, -, *, /)를 입력받아서 결과를 알려 주는 계산기
  • 숫자가 아닌 걸 넣거나 0으로 나눠도 멈추지 않는 계산기
  • q를 입력하면 끝나는 계산기

1단계: 계산하는 함수 만들기

먼저 계산 부분만 따로 함수로 만들어요. 함수로 분리해 두면 나중에 코드를 고치기도 쉽고 읽기도 편해요.

def calculate(a, op, b):
    if op == "+":
        return a + b
    elif op == "-":
        return a - b
    elif op == "*":
        return a * b
    elif op == "/":
        return a / b
    else:
        return None

연산자가 네 가지 중 하나가 아니면 None을 돌려줘요. 이 값으로 “잘못된 연산자”를 구분할 거예요.

2단계: 입력받고 반복하기

계산을 한 번만 하고 끝내면 아쉬우니까 while True로 계속 반복하다가, q를 입력하면 break로 빠져나오게 해요.

while True:
    first = input("첫 번째 숫자 (종료하려면 q): ")
    if first == "q":
        print("계산기를 종료합니다.")
        break
    op = input("연산자 (+, -, *, /): ")
    second = input("두 번째 숫자: ")

input()은 무엇을 입력하든 문자열로 돌려주기 때문에, 계산하려면 숫자로 바꿔야 해요. 이 부분은 다음 단계에서 처리해요.

3단계: try-except로 오류 막기

숫자로 바꾸는 float()는 “abc” 같은 글자를 만나면 ValueError를 일으키고, 0으로 나누면 ZeroDivisionError가 나요. 이 두 가지를 try-except로 잡아 줘요.

    try:
        a = float(first)
        b = float(second)
        result = calculate(a, op, b)
        if result is None:
            print("지원하지 않는 연산자예요. + - * / 중에서 골라 주세요.")
        else:
            print(f"결과: {result:g}")
    except ValueError:
        print("숫자만 입력해 주세요.")
    except ZeroDivisionError:
        print("0으로는 나눌 수 없어요.")

{result:g}는 7.0처럼 불필요한 소수점 이하를 빼고 7로 깔끔하게 보여 주는 서식이에요.

전체 코드

def calculate(a, op, b):
    if op == "+":
        return a + b
    elif op == "-":
        return a - b
    elif op == "*":
        return a * b
    elif op == "/":
        return a / b
    else:
        return None


while True:
    first = input("첫 번째 숫자 (종료하려면 q): ")
    if first == "q":
        print("계산기를 종료합니다.")
        break
    op = input("연산자 (+, -, *, /): ")
    second = input("두 번째 숫자: ")

    try:
        a = float(first)
        b = float(second)
        result = calculate(a, op, b)
        if result is None:
            print("지원하지 않는 연산자예요. + - * / 중에서 골라 주세요.")
        else:
            print(f"결과: {result:g}")
    except ValueError:
        print("숫자만 입력해 주세요.")
    except ZeroDivisionError:
        print("0으로는 나눌 수 없어요.")

실행 결과 예시

첫 번째 숫자 (종료하려면 q): 10
연산자 (+, -, *, /): /
두 번째 숫자: 4
결과: 2.5
첫 번째 숫자 (종료하려면 q): 5
연산자 (+, -, *, /): /
두 번째 숫자: 0
0으로는 나눌 수 없어요.
첫 번째 숫자 (종료하려면 q): abc
연산자 (+, -, *, /): +
두 번째 숫자: 3
숫자만 입력해 주세요.
첫 번째 숫자 (종료하려면 q): q
계산기를 종료합니다.
파이썬 계산기를 터미널에서 실행한 결과 화면

자주 하는 실수

  • 들여쓰기가 맞지 않을 때: try와 except는 같은 줄 위치에 맞춰야 해요.
  • q를 입력했는데 안 끝날 때: first == “q” 비교가 float() 변환보다 먼저 와야 해요. 순서가 바뀌면 q를 숫자로 바꾸려다 오류가 나요.
  • 소수점 계산이 이상할 때: 0.1 + 0.2가 0.30000000000000004로 나오는 건 컴퓨터가 소수를 저장하는 방식 때문이에요. 오류가 아니라서 걱정하지 않아도 돼요.
  • 더 해 볼 만한 것
  • 나머지(%), 거듭제곱(**) 연산자 추가하기
  • 계산 결과를 리스트에 저장해서 마지막에 기록 보여 주기
  • 소수점 둘째 자리까지만 보여 주기

마무리

이 코드를 맥 터미널에서 직접 실행해 봤어요. 처음에는 코드를 붙여넣을 때 마지막 줄의 실행 명령어까지 계산기 입력으로 들어가 버려서, 화면에 “숫자만 입력해 주세요.”가 줄줄이 나왔어요. 당황했지만 생각해 보니 잘못된 입력이 계속 들어와도 프로그램이 멈추지 않고 안내 문구만 보여 준 거라서, try-except가 제대로 일하고 있다는 증거였어요.

그다음 10 / 4를 넣어서 2.5가 나오는 것, 5 / 0을 넣어서 “0으로는 나눌 수 없어요.”가 나오는 것, 숫자 칸에 글자를 넣어도 멈추지 않는 것, 마지막으로 q를 넣어서 깔끔하게 종료되는 것까지 하나씩 확인했어요. 책으로만 읽을 때는 어렵게 느껴졌는데, 직접 일부러 오류를 내 보니 예외 처리가 왜 필요한지 확실히 알겠더라고요.

여러분도 코드를 복사해서 끝내지 말고, 일부러 이상한 값을 넣어 보세요. 그게 가장 빠른 공부예요. 다음 글에서는 이 계산기를 한 단계 발전시켜서 숫자 맞추기 게임을 만들어 볼게요.

여백
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.