파이썬 계산기 만들기 (첫 미니 프로젝트)
여기까지 따라오시느라 고생 많으셨어요. 변수, 조건문, 반복문, 함수, 예외 처리까지 한참 배웠는데, 솔직히 이게 다 따로따로 흩어져 있으면 좀 답답하잖아요. "이거 다 배워서 도대체 뭘 만드는 거지?" 싶은 순간이 분명 있으셨을 거예요.
저도 그랬거든요.
그래서 오늘은 지금까지 배운 걸 한 자리에 끌어모아서, 진짜 동작하는 작은 프로그램 하나를 만들어볼 거예요. 바로 콘솔 계산기.
우리가 만들 파이썬 계산기
거창한 건 아니에요. 이런 동작을 합니다.
- 사용자가 두 숫자와 연산자(+, -, *, /)를 입력하면 결과를 출력
q를 누르기 전까지 계속 사용 가능- 숫자 자리에 글자를 입력하거나 0으로 나눠도 프로그램이 죽지 않음
코드는 최종적으로 40줄 정도 나와요. 처음부터 완성본을 던지지 않고, 한 줄짜리부터 시작해서 다섯 단계에 걸쳐 천천히 발전시킬 거예요. 왜 이렇게 바꾸는지 단계마다 짚으면서 갈게요.
Step 1. 가장 단순한 더하기 프로그램
일단 동작하는 가장 작은 버전부터 만들어보죠.
a = float(input("첫 번째 숫자: ")) # 입력받은 문자열을 실수로 변환
b = float(input("두 번째 숫자: ")) # 두 번째 숫자도 동일하게 변환
print("결과:", a + b) # 두 수를 더해서 출력
실행 결과는 이런 식이에요.
첫 번째 숫자: 10
두 번째 숫자: 20
결과: 30.0
input()은 항상 문자열로 들어온다는 거 기억하시죠? 그래서 float()으로 감싸서 숫자로 바꿔줘야 해요. 안 그러면 "10" + "20"이 "1020"이 돼버리는 함정에 빠집니다.
Step 2. 사칙연산으로 확장하기
더하기만 되면 계산기라고 부르기 좀 민망하죠. 연산자도 같이 입력받아서 분기를 나눠봅시다.
a = float(input("첫 번째 숫자: "))
op = input("연산자(+, -, *, /): ") # 어떤 연산을 할지 입력받기
b = float(input("두 번째 숫자: "))
if op == "+":
print("결과:", a + b)
elif op == "-":
print("결과:", a - b)
elif op == "*":
print("결과:", a * b)
elif op == "/":
print("결과:", a / b)
else:
print("모르는 연산자예요.")
if/elif/else로 분기를 만든 거예요. 여기서 멈춰도 계산기 흉내는 어느 정도 나는데, 코드를 한참 보고 있으면 좀 거슬리는 부분이 보일 거예요. 분기 안에 계산식이 박혀 있어서, 나중에 뭔가 손대려면 네 군데를 다 고쳐야 한다는 점.
Step 3. 함수로 깔끔하게 정리하기 (python 미니 프로젝트의 핵심)
계산 로직을 함수로 따로 빼봅시다.
def add(a, b): # 더하기 함수
return a + b
def subtract(a, b): # 빼기 함수
return a - b
def multiply(a, b): # 곱하기 함수
return a * b
def divide(a, b): # 나누기 함수
return a / b
이러면 분기 부분이 훨씬 깔끔해져요. print("결과:", add(a, b)) 이런 식으로요.
"굳이 함수로 빼야 하나?" 싶을 수 있는데, 나중에 제곱이나 나머지 연산을 추가하고 싶을 때 이 차이가 확 와닿거든요. 함수로 분리해두면 새 연산을 추가할 때 함수 하나만 만들고 분기에 한 줄만 더하면 끝이에요.
그리고 살짝 떡밥 하나. 함수가 4개 됐죠. 만약 공학용 계산기처럼 sin, cos, log 이런 게 20개씩 늘어난다면 어떨까요? 관련된 함수들을 한 덩어리로 묶고 싶어지는 순간이 와요. 이건 잠깐 미뤄두고 다음 단계 가볼게요.
Step 4. 한 번 실행으로 계속 쓰기
지금까지 만든 건 한 번 계산하면 끝나요. 또 계산하려면 다시 실행해야 하죠. 이건 좀 번거롭잖아요.
while True로 무한 반복을 걸고, q를 누르면 빠져나오게 만들어볼게요.
while True:
op = input("\n연산자(+, -, *, /), 종료는 q: ")
if op == "q": # q 입력 시 반복문 탈출
print("계산기를 종료합니다.")
break
# 여기서 숫자 입력받고 계산
while True는 말 그대로 무한 루프라서, break 조건을 꼭 만들어줘야 해요. 안 그러면 Ctrl+C로 강제 종료해야 하는 사태가 벌어집니다. 처음에 이거 깜빡하시는 분들 많아요.
Step 5. 잘못 입력해도 죽지 않게
여기까지 와도 사용자가 숫자 자리에 abc를 치면 어떻게 될까요? ValueError가 터지면서 프로그램이 죽어요. 0으로 나누면 ZeroDivisionError로 또 죽고요.
진짜 사용할 만한 프로그램이 되려면, 이런 실수에도 끄떡없어야 하잖아요. 지난 글에서 배운 try/except로 감싸봅시다.
try:
a = float(input("첫 번째 숫자: "))
b = float(input("두 번째 숫자: "))
print("결과:", calculate(op, a, b))
except ValueError:
print("숫자만 입력해주세요.")
except ZeroDivisionError:
print("0으로는 나눌 수 없어요.")
이제 사용자가 뭘 잘못 쳐도 안내 메시지만 띄우고 계속 진행돼요.
완성된 파이썬 계산기 코드
다섯 단계를 거쳐서 만든 최종본이에요.
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
return a / b
def calculate(op, a, b):
# 연산자에 맞는 함수를 호출
if op == "+":
return add(a, b)
elif op == "-":
return subtract(a, b)
elif op == "*":
return multiply(a, b)
elif op == "/":
return divide(a, b)
else:
return None
print("간단 계산기 (종료하려면 q)")
while True:
op = input("\n연산자를 입력하세요(+, -, *, /): ")
if op == "q":
print("계산기를 종료합니다.")
break
try:
a = float(input("첫 번째 숫자: "))
b = float(input("두 번째 숫자: "))
result = calculate(op, a, b)
if result is None:
print("모르는 연산자예요. 다시 시도해주세요.")
else:
print("결과:", result)
except ValueError:
print("숫자만 입력해주세요.")
except ZeroDivisionError:
print("0으로는 나눌 수 없어요.")
실행해보면 이런 흐름이에요.
간단 계산기 (종료하려면 q)
연산자를 입력하세요(+, -, *, /): *
첫 번째 숫자: 7
두 번째 숫자: 8
결과: 56.0
연산자를 입력하세요(+, -, *, /): /
첫 번째 숫자: 10
두 번째 숫자: 0
0으로는 나눌 수 없어요.
연산자를 입력하세요(+, -, *, /): q
계산기를 종료합니다.
40줄 안에 input, 형변환, 조건문, 반복문, 함수, 예외 처리까지 다 들어갔어요. 지금까지 배운 게 한 자리에 모인 거죠.
더 만들어보는 파이썬 실습 과제
여기서 멈추지 마시고, 직접 손대보시면 훨씬 빨리 늘어요. 세 가지 정도 던져드릴게요.
- 제곱(`
)과 나머지(%) 연산자 추가하기** —calculate함수에elif` 두 줄만 추가하면 돼요. 함수로 분리해둔 게 왜 좋은지 체감되실 거예요. - 계산 기록을 파일로 저장하기 — 매 계산마다
"10 + 20 = 30"형태로history.txt에 한 줄씩 추가해보세요.with open("history.txt", "a", encoding="utf-8")힌트입니다. - 잘못된 연산자 입력 시 다시 묻기 — 지금은 모르는 연산자면 그냥 다음 반복으로 넘어가는데, "다시 입력하세요" 하고 같은 자리에서 또 묻게 만들어보세요.
처음엔 막힐 수 있는데, 그게 정상이에요. 막히면 막힌 채로 한참 헤매보시는 게 진짜 실력이 됩니다.
다음은 클래스, 그리고 중급으로
40줄짜리 코드 하나가 완성됐네요. 별거 아닌 것 같아도, 이게 지금까지 배운 게 다 녹아든 결과물이거든요.
그런데 코드를 한참 보고 있으면 살짝 답답한 부분이 보이실 거예요. add, subtract, multiply, divide 이 함수들이 다 "계산기"라는 한 묶음에 속하는데, 그냥 따로따로 떠다니고 있잖아요.
"관련된 것끼리 한 덩어리로 묶어두고 싶다"는 느낌, 이게 다음에 배울 클래스라는 개념이에요. Calculator라는 이름표 하나에 add, subtract, multiply, divide를 다 담아두는 식으로요. 여기서부터가 본격 중급 입구입니다.
제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀
'Application > Python' 카테고리의 다른 글
| [Python] 파이썬 생성자(__init__) 쉽게 이해하기 (0) | 2026.05.11 |
|---|---|
| [Python] 파이썬 클래스, 객체지향이란 무엇일까 (0) | 2026.05.08 |
| [Python] 파이썬 예외처리, try except로 오류 잡는 법 (0) | 2026.05.06 |
| [Python] 파이썬 파일 읽기와 쓰기: open, read, write 한 번에 정리 (0) | 2026.05.04 |
| [Python] 파이썬 모듈과 import 사용법, 남이 만든 도구 가져다 쓰기 (0) | 2026.04.30 |