
Python을 활용하면 간단한 계산기를 손쉽게 만들 수 있습니다. 이 장에서는 기본적인 사칙연산(덧셈, 뺄셈, 곱셈, 나눗셈)을 처리할 수 있는 계산기를 단계별로 작성해봅니다. 사용자 입력을 받아 계산을 수행하고, 잘못된 입력을 처리하는 예외 처리 기능을 추가하여 안정성을 높인 프로그램을 설계합니다.
1. 프로그램의 목표
• 사용자로부터 두 개의 숫자와 연산자를 입력받습니다.
• 입력받은 연산자에 따라 계산을 수행합니다.
• 잘못된 입력이나 예외 상황을 처리하여 안정성을 제공합니다.
2. 기본 계산기 작성
㉮ 단일 연산 수행
Python의 input() 함수를 사용하여 사용자로부터 입력을 받고, if-elif 조건문으로 연산을 수행합니다.
기본 코드
# 사용자 입력 받기
num1 = float(input("첫 번째 숫자를 입력하세요: "))
operator = input("연산자를 입력하세요 (+, -, *, /): ")
num2 = float(input("두 번째 숫자를 입력하세요: "))
# 연산 수행
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 != 0:
result = num1 / num2
else:
result = "0으로 나눌 수 없습니다."
else:
result = "잘못된 연산자입니다."
# 결과 출력
print(f"결과: {result}")
㉯ 예외 처리 추가
사용자가 숫자가 아닌 값을 입력하거나 0으로 나누는 경우를 처리하기 위해 **try-except**를 활용합니다.
예제 코드
try:
num1 = float(input("첫 번째 숫자를 입력하세요: "))
operator = input("연산자를 입력하세요 (+, -, *, /): ")
num2 = float(input("두 번째 숫자를 입력하세요: "))
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 != 0:
result = num1 / num2
else:
result = "0으로 나눌 수 없습니다."
else:
result = "잘못된 연산자입니다."
except ValueError:
result = "숫자를 입력해야 합니다."
print(f"결과: {result}")
3. 반복 기능 추가
사용자가 여러 번 계산할 수 있도록 while 반복문을 추가합니다.
특정 명령(예: "exit")을 입력하면 프로그램이 종료되도록 구현합니다.
코드 예제
while True:
try:
print("계산기를 시작합니다. 종료하려면 'exit'을 입력하세요.")
num1 = input("첫 번째 숫자를 입력하세요: ")
if num1.lower() == "exit":
print("프로그램을 종료합니다.")
break
num1 = float(num1)
operator = input("연산자를 입력하세요 (+, -, *, /): ")
num2 = float(input("두 번째 숫자를 입력하세요: "))
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 != 0:
result = num1 / num2
else:
result = "0으로 나눌 수 없습니다."
else:
result = "잘못된 연산자입니다."
except ValueError:
result = "숫자를 입력해야 합니다."
print(f"결과: {result}")
4. 사용자 경험 개선
㉮ 입력값 유효성 검사
숫자와 연산자 입력을 별도의 함수로 분리하여 입력값을 검증합니다.
코드 예제
def get_number(prompt):
while True:
try:
return float(input(prompt))
except ValueError:
print("유효한 숫자를 입력하세요.")
def get_operator():
while True:
operator = input("연산자를 입력하세요 (+, -, *, /): ")
if operator in ["+", "-", "*", "/"]:
return operator
else:
print("유효한 연산자를 입력하세요.")
while True:
print("계산기를 시작합니다. 종료하려면 'exit'을 입력하세요.")
num1 = get_number("첫 번째 숫자를 입력하세요: ")
operator = get_operator()
num2 = get_number("두 번째 숫자를 입력하세요: ")
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
result = num1 / num2 if num2 != 0 else "0으로 나눌 수 없습니다."
print(f"결과: {result}")
if input("다시 계산하려면 'y'를 입력하세요: ").lower() != "y":
print("프로그램을 종료합니다.")
break
5. 확장 아이디어
㉮ 로그 저장 기능
계산 기록을 파일에 저장하여 사용자가 나중에 확인할 수 있도록 합니다.
코드 추가
with open("calculator_log.txt", "a") as log_file:
log_file.write(f"{num1} {operator} {num2} = {result}\n")
㉯ 고급 계산 기능 추가
• 거듭제곱(**): 추가 연산자 구현.
• 루트 계산: math.sqrt() 활용.
㉰ GUI 계산기
• tkinter를 사용하여 버튼과 텍스트 입력으로 동작하는 계산기 GUI를 만듭니다.
import tkinter as tk
from tkinter import messagebox
def calculate():
try:
num1 = float(entry_num1.get())
num2 = float(entry_num2.get())
operator = operator_var.get()
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 == 0:
result = "0으로 나눌 수 없습니다."
else:
result = num1 / num2
else:
result = "유효한 연산자를 선택하세요."
result_label.config(text=f"결과: {result}")
except ValueError:
messagebox.showerror("입력 오류", "유효한 숫자를 입력하세요.")
def reset():
entry_num1.delete(0, tk.END)
entry_num2.delete(0, tk.END)
operator_var.set("+")
result_label.config(text="결과:")
# Tkinter 기본 창 설정
root = tk.Tk()
root.title("계산기")
# 첫 번째 숫자 입력
tk.Label(root, text="첫 번째 숫자:").grid(row=0, column=0, padx=10, pady=10)
entry_num1 = tk.Entry(root, width=20)
entry_num1.grid(row=0, column=1, padx=10, pady=10)
# 연산자 선택
tk.Label(root, text="연산자:").grid(row=1, column=0, padx=10, pady=10)
operator_var = tk.StringVar(value="+")
operator_menu = tk.OptionMenu(root, operator_var, "+", "-", "*", "/")
operator_menu.grid(row=1, column=1, padx=10, pady=10)
# 두 번째 숫자 입력
tk.Label(root, text="두 번째 숫자:").grid(row=2, column=0, padx=10, pady=10)
entry_num2 = tk.Entry(root, width=20)
entry_num2.grid(row=2, column=1, padx=10, pady=10)
# 계산 버튼
calculate_button = tk.Button(root, text="계산", command=calculate)
calculate_button.grid(row=3, column=0, padx=10, pady=10)
# 초기화 버튼
reset_button = tk.Button(root, text="초기화", command=reset)
reset_button.grid(row=3, column=1, padx=10, pady=10)
# 결과 출력
result_label = tk.Label(root, text="결과:", font=("Arial", 14))
result_label.grid(row=4, column=0, columnspan=2, padx=10, pady=10)
# Tkinter 메인 루프 실행
root.mainloop()

6. 요약
기본 계산기는 Python의 입력 처리, 조건문, 반복문, 예외 처리 등을 배우고 연습할 수 있는 훌륭한 프로젝트입니다. 사용자 경험을 개선하기 위한 다양한 확장 기능을 추가하면 더 복잡한 프로그램을 설계할 수 있습니다.
핵심 정리
㉮ 입력과 조건문:
• 사용자 입력 처리 및 연산자에 따른 계산 수행.
㉯ 예외 처리:
• 잘못된 입력에 대비한 try-except 구문 활용.
㉰ 확장 가능성:
• 반복 실행, 파일 저장, GUI 추가 등 다양한 확장 가능.
'코딩교육 > Python 초등교육에서 전문가까지' 카테고리의 다른 글
1단계 : 10. Python 으로 간단한 프로젝트 만들기 (feat. 간단한 텍스트 기반 게임 - 숫자 맞추기) (0) | 2025.02.10 |
---|---|
1단계 : 10. Python 으로 간단한 프로젝트 만들기 (feat. 로또 번호 생성기) (0) | 2025.02.08 |
1단계 : 10. Python 으로 간단한 프로젝트 만들기 (feat. 이름과 나이를 입력받아 인사하는 프로그램) (0) | 2025.02.06 |
1단계 : 9. 함수와 모듈 (feat. 파일 작업에서 예외 처리) (0) | 2025.02.05 |
1단계 : 9. 함수와 모듈 (feat. 파일 경로와 모드 이해) (0) | 2025.02.04 |