본문 바로가기
  • You find inspiration to create your own path !
업무 자동화/python & CAD

Python 학습] 초보자를 위한 프로그램

by ToolBOX01 2025. 8. 16.
반응형

▣ 계산기

 

 

파이썬 초보도 간단하게 만들 수 있는 프로그램 아이디어

파이썬 프로그램파이썬을 처음 시작하시는 분들이 간단하게 만들어 사용해 볼 만한 프로그램 몇 가지를 만들어보았습니다. 이 프로젝트들은 초보자도 쉽게 시작할 수 있으며, 파이썬의 기본 개

mubi.tistory.com

이 프로그램은 사용자로부터 두 개의 숫자와 하나의 연산자를 입력받아 사칙연산(+,-,*,/)을 수행하고 그 결과를 출력합니다.

  • 입력: input() 함수를 사용해 첫 번째 숫자, 연산자, 두 번째 숫자를 차례대로 입력받습니다.
  • 연산: if와 elif 조건문을 사용하여 입력된 연산자에 따라 덧셈, 뺄셈, 곱셈, 나눗셈을 실행합니다.
  • 예외 처리:
    • 만약 나눗셈('/') 연산 시 두 번째 숫자가 0이면, "0으로 나눌 수 없습니다."라는 메시지를 출력합니다.
    • 입력된 연산자가 사칙연산 기호가 아니면, "유효한 연산자를 입력하세요."라는 메시지를 출력합니다.
  • 결과 출력: print() 함수를 사용해 최종 연산 결과를 화면에 보여줍니다.

 

▷ 계산기 프로그램 코드

def calculator():
    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}")

calculator()

위 파이썬 코드는 함수로 정의 되어 있습니다.  함수는 특정 작업을 수행하는 코드 블록입니다. 쉽게 말해, 자주 사용되는 코드를 하나의 묶음으로 만들어 필요할 때마다 재사용할 수 있게 해주는 도구입니다. 복잡한 코드를 여러 개의 작은 함수로 나누면 코드를 더 읽기 쉽게 만들고 관리하기 편해집니다. 한 파일에 정의된 함수를 다른 파일에서 모듈(module) 형태로 불러와 사용할 수 있습니다.

파이썬에서 함수는 def 키워드로 시작하여 함수의 이름과 매개변수를 지정합니다. 함수 내부에 포함되는 코드는 들여쓰기(indentation)를 통해 구분됩니다. 이 들여쓰기가 끝나는 지점이 바로 함수의 끝이 됩니다. 

def my_function(parameter1, parameter2):
    # 이 부분이 함수의 시작입니다.
    # 들여쓰기 된 모든 코드가 함수에 속합니다.
    print(parameter1 + parameter2)
    # 이 부분이 함수의 끝입니다. 들여쓰기가 끝납니다.

코드의 맨지막 "calculator()"는 정의된 함수를 실행하기 위해서입니다. 파이썬에서 def를 사용하여 함수를 정의하는 것은 설계도를 만드는 것과 같습니다. 설계도만 가지고는 건물을 지을 수 없듯이, 함수를 정의만 해놓고 호출하지 않으면 함수 안의 코드는 전혀 실행되지 않습니다. 코드의 마지막 줄에 있는 calculator()는 설계도에 따라 실제로 건물을 짓는 행위, 즉 정의된 함수를 호출하여 그 안에 있는 모든 코드가 순서대로 실행되도록 만드는 역할을 합니다. 따라서 이 코드가 정상적으로 작동하려면 반드시 마지막 줄에 calculator()와 같은 함수 호출이 필요합니다. 이 한 줄이 있어야만 "첫 번째 숫자를 입력하세요:"라는 메시지가 화면에 나타나고 사용자와의 상호작용이 시작됩니다.


▷ 코드 설명

1. 함수 정의 : def calculator():

calculator라는 이름의 함수를 정의합니다. 이 함수 내부에 계산기 프로그램의 모든 기능이 포함되어 있습니다.

2. 사용자 입력

num1 = float(input("첫 번째 숫자를 입력하세요: "))
operator = input("연산자를 입력하세요 (+, -, *, /): ")
num2 = float(input("두 번째 숫자를 입력하세요: "))

input() 함수를 사용하여 사용자로부터 세 가지 값을 입력받습니다.

  • 첫 번째 숫자와 두 번째 숫자는 float()을 통해 소수점을 포함하는 숫자로 변환됩니다.
  • 연산자는 그대로 문자열로 저장됩니다.
  • "nun1", "operator", "num2"는 변수 입니다.

3. 조건에 따른 연산

if operator == '+':
    result = num1 + num2
elif operator == '-':
    result = num1 - num2
...
  • if, elif, else 조건문을 사용하여 입력된 operator 값에 따라 다른 연산을 수행합니다.
  • 덧셈(+), 뺄셈(-), 곱셈(*)을 각각 처리합니다.

4. 나눗셈과 예외 처리

elif operator == '/':
    if num2 != 0:
        result = num1 / num2
    else:
        result = "0으로 나눌 수 없습니다."

나눗셈('/')의 경우, 특별한 예외 처리가 포함되어 있습니다.

  • 만약 두 번째 숫자(num2)가 0이 아니라면 나눗셈을 실행하지만, 만약 0이라면 "0으로 나눌 수 없습니다."라는 메시지를 result에 할당합니다.
  • 이는 0으로 나누는 수학적 오류를 방지하기 위함입니다.

6. 유효하지 않은 연산자 처리

else:
    result = "유효한 연산자를 입력하세요."
  • if와 elif의 모든 조건에 해당하지 않을 경우(즉, +, -, *, / 이외의 문자가 입력된 경우), "유효한 연산자를 입력하세요."라는 메시지를 result에 할당합니다.

7. 결과 출력

print(f"결과: {result}")
  • 모든 연산이 끝난 후, f-string을 사용하여 최종 결과(result)를 화면에 출력합니다.

사용된 변수 이름 및 용도

calculator() 함수에 포함된 변수 이름들은 다음과 같습니다.
이 변수들은 모두 함수 내에서만 유효한 지역 변수(local variables)입니다. 

1) num1: 첫 번째 숫자를 저장하는 변수입니다.

2) operator: 사용자가 입력한 연산자(+, -, *, /)를 저장하는 변수입니다.

3) num2: 두 번째 숫자를 저장하는 변수입니다.

4) result: 연산 결과를 저장하는 변수입니다.

 


▣ 계산기 프로그램

▣ 계산기 프로그램 소스

import customtkinter

# 계산기 클래스 정의
class CalculatorApp(customtkinter.CTk):
    def __init__(self):
        super().__init__()

        # 창 설정
        self.title("GUI 계산기 (소수점)")
        self.geometry("300x400")
        self.resizable(False, False)  # 창 크기 변경 불가
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)

        # 결과 화면(Entry) 위젯
        self.result_display = customtkinter.CTkEntry(self, width=280, height=50, font=("Helvetica", 24), justify='right')
        self.result_display.grid(row=0, column=0, columnspan=4, padx=10, pady=10)
        self.result_display.insert(0, "0")

        # 버튼 생성
        buttons = [
            'C', 'Del', '(', ')',
            '7', '8', '9', '/',
            '4', '5', '6', '*',
            '1', '2', '3', '-',
            '.', '0', '=', '+'
        ]

        # 버튼을 그리드에 배치
        row = 1
        col = 0
        for button_text in buttons:
            if button_text == '=':
                button = customtkinter.CTkButton(self, text=button_text, width=60, height=60, font=("Helvetica", 20),
                                                command=lambda t=button_text: self.on_button_click(t), fg_color="green")
            elif button_text in ['C', 'Del']:
                button = customtkinter.CTkButton(self, text=button_text, width=60, height=60, font=("Helvetica", 20),
                                                command=lambda t=button_text: self.on_button_click(t), fg_color="gray")
            elif button_text in ['/', '*', '-', '+']:
                button = customtkinter.CTkButton(self, text=button_text, width=60, height=60, font=("Helvetica", 20),
                                                command=lambda t=button_text: self.on_button_click(t), fg_color="orange")
            else:
                button = customtkinter.CTkButton(self, text=button_text, width=60, height=60, font=("Helvetica", 20),
                                                command=lambda t=button_text: self.on_button_click(t))

            button.grid(row=row, column=col, padx=5, pady=5)
            col += 1
            if col > 3:
                col = 0
                row += 1

        # 계산 상태 변수
        self.expression = ""

    # 버튼 클릭 이벤트 처리
    def on_button_click(self, char):
        current_text = self.result_display.get()

        if char == 'C':
            self.expression = ""
            self.result_display.delete(0, 'end')
            self.result_display.insert(0, "0")
        elif char == 'Del':
            # 결과 화면의 마지막 문자 하나를 삭제
            if len(current_text) > 1:
                new_text = current_text[:-1]
                self.result_display.delete(0, 'end')
                self.result_display.insert(0, new_text)
                self.expression = self.expression[:-1]
            else:
                self.result_display.delete(0, 'end')
                self.result_display.insert(0, "0")
                self.expression = ""
        elif char == '=':
            try:
                if "/0" in self.expression:
                    self.result_display.delete(0, 'end')
                    self.result_display.insert(0, "오류: 0으로 나눌 수 없습니다.")
                    self.expression = ""
                    return

                result = eval(self.expression)
                self.result_display.delete(0, 'end')
                self.result_display.insert(0, str(result))
                self.expression = str(result)
            except (SyntaxError, ZeroDivisionError):
                self.result_display.delete(0, 'end')
                self.result_display.insert(0, "오류")
                self.expression = ""
            except Exception:
                self.result_display.delete(0, 'end')
                self.result_display.insert(0, "오류")
                self.expression = ""
        else:
            if current_text == "0" and char in '123456789':
                self.result_display.delete(0, 'end')
                self.expression = ""

            if char == '.':
                if '.' in self.result_display.get():
                    return
            
            self.result_display.insert('end', char)
            self.expression += char
            
# 애플리케이션 실행
if __name__ == "__main__":
    app = CalculatorApp()
    app.mainloop()

 

by korealionkk@gmail.com


반응형