파이썬 프로그래밍: 고급 계산기 및 산술 문제 생성기 구현

파이썬 프로그래밍: 고급 계산기 및 산술 문제 생성기 구현

실험 목차

  • 1. 다양한 수학 연산을 지원하는 고급 계산기 개발
  • 2. 초등학생을 위한 산술 문제 생성기 제작
  • 3. 코드 관리 및 버전 컨트롤

1. 고급 계산기 구현

1.1 설계 개요

본 계산기는 기본적인 정수 연산(덧셈, 뺄셈, 곱셈, 나눗셈, 나머지)부터 시작하여, 실수 연산과 복소수 연산을 지원합니다. 또한 고급 수학 함수인 로그, 지수, 제곱근, 삼각함수 등도 구현합니다.

입력 형식의 일관성을 위해 사용자가 먼저 연산 유형을 선택한 후 숫자를 입력하는 방식을 채택했습니다.

1.2 구현 코드


import math

def 덧셈(값1, 값2):
    return 값1 + 값2

def 뺄셈(값1, 값2):
    return 값1 - 값2

def 곱셈(값1, 값2):
    return 값1 * 값2

def 나눗셈(값1, 값2):
    if 값2 == 0:
        print("0으로 나눌 수 없습니다")
        return 0
    return 값1 / 값2

def 로그(밑수, 진수):
    return math.log(진수, 밑수)

def 거듭제곱(밑수, 지수):
    return math.pow(밑수, 지수)

def 제곱근(값):
    return math.sqrt(값)

def 사인(각도):
    return math.sin(각도)

def 코사인(각도):
    return math.cos(각도)

def 탄젠트(각도):
    return math.tan(각도)

print('''
고급 계산기 프로그램
-------------------------------
이 프로그램은 다양한 수학 연산을 지원합니다.
사용자는 먼저 연산 유형을 선택한 후 숫자를 입력해야 합니다.
-------------------------------
''')

실행중 = True
while 실행중:
    연산자 = input("연산자를 선택하세요 (+, -, *, /, log, pow, sqrt, sin, cos, tan): ")
    숫자타입 = input("숫자 타입 선택 (1:복소수, 2:정수, 3:실수): ")
    
    if 숫자타입 == "1":
        숫자1 = complex(input("첫 번째 숫자를 입력하세요: "))
        if 연산자 not in ['sqrt', 'sin', 'cos', 'tan']:
            숫자2 = complex(input("두 번째 숫자를 입력하세요: "))
    elif 숫자타입 == "2":
        숫자1 = int(input("첫 번째 숫자를 입력하세요: "))
        if 연산자 not in ['sqrt', 'sin', 'cos', 'tan']:
            숫자2 = int(input("두 번째 숫자를 입력하세요: "))
    elif 숫자타입 == "3":
        숫자1 = float(input("첫 번째 숫자를 입력하세요: "))
        if 연산자 not in ['sqrt', 'sin', 'cos', 'tan']:
            숫자2 = float(input("두 번째 숫자를 입력하세요: "))
    
    if 연산자 == "+":
        print(f"{숫자1} + {숫자2} = {덧셈(숫자1, 숫자2)}")
    elif 연산자 == "-":
        print(f"{숫자1} - {숫자2} = {뺄셈(숫자1, 숫자2)}")
    elif 연산자 == "*":
        print(f"{숫자1} * {숫자2} = {곱셈(숫자1, 숫자2)}")
    elif 연산자 == "/":
        print(f"{숫자1} / {숫자2} = {나눗셈(숫자1, 숫자2)}")
    elif 연산자 == "log":
        print(f"log_{숫자2}({숫자1}) = {로그(숫자2, 숫자1)}")
    elif 연산자 == "pow":
        print(f"{숫자1}^{숫자2} = {거듭제곱(숫자1, 숫자2)}")
    elif 연산자 == "sqrt":
        print(f"√{숫자1} = {제곱근(숫자1)}")
    elif 연산자 == "sin":
        print(f"sin({숫자1}) = {사인(숫자1)}")
    elif 연산자 == "cos":
        print(f"cos({숫자1}) = {코사인(숫자1)}")
    elif 연산자 == "tan":
        print(f"tan({숫자1}) = {탄젠트(숫자1)}")

    계속 = input("계속하시겠습니까? (Y/n): ")
    if 계속 in ["Y", "y"]:
        실행중 = True
    else:
        실행중 = False

print("고급 계산기를 사용해주셔서 감사합니다!")

1.3 기능 테스트

계산기는 정수, 실수, 복소수 각 타입별로 테스트되었습니다.

2. 초등학생용 산술 문제 생성기

2.1 설계 개요

초등학생을 대상으로 기본적인 사칙연산 문제를 생성하고 사용자의 답안을 채점하는 프로그램입니다. 문제 수량을 지정할 수 있으며, 정답 여부에 따라 점수를 계산합니다.

2.2 구현 코드


import random

print('''
산술 문제 생성기
-------------------------------
이 프로그램은 초등학생을 위한 산술 문제를 생성합니다.
-------------------------------
''')
print('산술 문제에 오신 것을 환영합니다. 나눗셈 문제는 소수점 첫째 자리까지 반올림합니다.')

점수 = 0
문제수 = int(input('몇 문제를 풀겠습니까? '))

for i in range(문제수):
    연산자 = random.randint(1, 4)
    숫자1 = random.randint(1, 100)
    숫자2 = random.randint(1, 100)
    
    if 연산자 == 1:  # 덧셈
        답변 = int(input(f"{숫자1} + {숫자2} = ? "))
        if 답변 == (숫자1 + 숫자2):
            print('정답입니다!')
            점수 += 1
        else:
            print('오답입니다.')
    elif 연산자 == 2:  # 뺄셈
        답변 = int(input(f"{숫자1} - {숫자2} = ? "))
        if 답변 == (숫자1 - 숫자2):
            print('정답입니다!')
            점수 += 1
        else:
            print('오답입니다.')
    elif 연산자 == 3:  # 곱셈
        답변 = int(input(f"{숫자1} × {숫자2} = ? "))
        if 답변 == (숫자1 * 숫자2):
            print('정답입니다!')
            점수 += 1
        else:
            print('오답입니다.')
    elif 연산자 == 4:  # 나눗셈
        답변 = float(input(f"{숫자1} ÷ {숫자2} = ? "))
        if abs(답변 - (숫자1 / 숫자2)) <= 0.1:
            print('정답입니다!')
            점수 += 1
        else:
            print('오답입니다.')

print(f'총 {문제수}문제 중 {점수}문제를 맞혔습니다. 다음에 또 만나요!')

3. 코드 버전 관리

프로젝트 코드는 Gitee(Git 기반 코드 호스팅 서비스)에 업로드되었습니다. 이를 통해 코드 버전 관리, 협업 및 백업이 가능합니다.

4. 개발 과정에서의 문제 해결

4.1 문제 1: 입력 순서 조정

초기 버전에서 숫자를 먼저 입력하는 방식은 단항 연산(예: 제곱근, 삼각함수)의 구현을 복잡하게 만들었습니다.

해결책: 연산 유형을 먼저 선택한 후 숫자를 입력하는 순서로 변경하여 입력 처리를 단순화했습니다.

4.2 문제 2: 코드 간결성 개선

초기 코드는 C 스타일의 긴 if-else 구조로 작성되어 가독성이 떨어졌습니다.

해결책: 딕셔너리를 활용하여 코드 구조를 간결하게 개선할 수 있음을 확인했으나, 본 실험의 주요 목적과는 무관하여 적용하지 않았습니다.

태그: 파이썬 계산기 산술 문제 생성기 프로그래밍 실습 수학 연산

7월 4일 19:54에 게시됨