본문 바로가기
코딩교육/Python 초등교육에서 전문가까지

1단계 : 10. Python 으로 간단한 프로젝트 만들기 (feat. 기본 계산기 만들기 - 덧셈, 뺄셈, 곱셈, 나눗셈 기능)

by 제리토리 2025. 2. 7.
728x90
반응형

 

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 추가 등 다양한 확장 가능.

 

728x90
반응형