8. 수학문제를 풀어보아요

【파일구조】

c:\workshop\math.py    1개

1수학 연산 프로그램

가. 수학 연산 프로그램

수학 연산 프로그램은 수학과 관련된 집합, 절댓값, 거듭제곱 등의 다양한 수학 연산을 도와주는 프로그램이다. 수학 연산 프로그램의 구조는 집합을 구하는 함수와 절댓값을 구하는 함수 그리고 거듭제곱을 구하는 함수로 나누어져 있으며, 프로그램을 실행하는 부분에서 각 함수를 호출하여 원하는 수학 연산을 도와주는 프로그램이다. 그렇다면 수학이라는 어려운 문제를 아래의 프로그램을 통해서 쉽고 재미있게 학습하여 보도록 하자.

이미지. 수학 연산 프로그램을 설명한 동영상의 스크린샷.
<수학 연산 프로그램>

def set(): # 집합을 구하는 함수


    # a 집합과 b 집합

    a={1, 2, 3, 4, 5, 6, 7}

    b={2, 3, 4, 8, 9, 10}


    print("a 집합 : ", a) # a 집합 출력

    print("b 집합 : ", b) # b 집합 출력


    while True:

        # 구하고 싶은 집합을 선택

        print("구하고 싶은 집합을 선택하시오.")

        # select 에 값을 입력

        select=int(input("1. 합집합 2. 교집합 3. 차집합 4. 종료"))


        if(select==1): # select 변숫값이 1인 경우

            print("a와 b의 합집합: ", a|b) # 합집합 출력

        elif(select==2): # select 변숫값이 2인 경우

            print("a와 b 집합의 교집합: ", a&b) # 교집합 출력

        elif(select==3): # select 변숫값이 3인 경우

            print("a에서 b를 뺀 차집합: ", a-b) # 차집합 출력

        else:

            break

    return

def absolute(): # 절댓값을 구하는 함수


    number=int(input("구하고 싶은 절댓값을 입력하시오.")) # 값을 입력


    result=abs(number) # 절댓값 내장함수를 이용하여 결과에 값 입력


    print("절댓값은", result, "입니다") # 절댓값 출력


    return

def power(): # 거듭제곱을 구하는 함수


    # 거듭제곱의 아래 값 입력

    number=int(input("구하고 싶은 거듭제곱의 아래 값을 입력하시오."))

    # 거듭제곱의 지수 값 입력

    number2=int(input("지수 값을 입력하시오."))


    result=number ** number2 # 거듭제곱 구하기

    print("거듭제곱의 값은", result, "입니다") # 결과값 출력

    return

print("재미있는 수학을 계산해주는 프로그램입니다.") # 화면에 출력


while True:

    # 수학 연산 중 원하는 프로그램 선택

    print("수학 연산 프로그램입니다.")

    # select 값 입력

    select=int(input("1. 집합 연산 2. 절댓값 3. 거듭제곱 4. 종료"))


    if(select==1): # select 변숫값이 1인 경우

        print("집합을 구하는 프로그램입니다.")

        set() # 집합 함수 호출

    elif(select==2): # select 변숫값이 2인 경우

        print("절댓값을 구하는 프로그램입니다.")

        absolute() # 절댓값 함수 호출

    elif(select==3): # select 변숫값이 3인 경우

        print("거듭제곱을 구하는 프로그램입니다.")

        power() # 거듭제곱 함수 호출

    else:

        break

나. 수학 연산 프로그램 코딩 해설

1) 집합을 구하는 함수 선언

수학 연산 프로그램의 첫 번째 함수는 집합을 구하는 함수이다. 함수의 이름은 set이며 아래의 set 함수를 자세히 살펴보며 하나씩 알아보도록 하자.

def set(): # 집합을 구하는 함수


    # a 집합과 b 집합

    a={1, 2, 3, 4, 5, 6, 7}

    b={2, 3, 4, 8, 9, 10}


    print("a 집합 : ", a) # a 집합 출력

    print("b 집합 : ", b) # b 집합 출력


    while True:

        # 구하고 싶은 집합을 선택

        print("구하고 싶은 집합을 선택하시오.")

        # select 에 값을 입력

        select=int(input("1. 합집합 2. 교집합 3. 차집합 4. 종료"))


        if(select==1): # select 변숫값이 1인 경우

            print("a와 b의 합집합: ", a|b) # 합집합 출력

        elif(select==2): # select 변숫값이 2인 경우

            print("a와 b 집합의 교집합: ", a&b) # 교집합 출력

        elif(select==3): # select 변숫값이 3인 경우

            print("a에서 b를 뺀 차집합: ", a-b) # 차집합 출력

        else:

            break

    return

set 함수의 첫 부분은 a 집합과 b 집합에 값을 저장하는 프로그램 코딩부터 시작한다. 집합을 연산하기 위해서는 튜플이라는 자료형이 사용되게 되는데, "a={1, 2, 3, 4, 5, 6, 7}, b={2, 3, 4, 8, 9, 10}" 이 부분이 튜플 자료형을 사용한 것으로 써 a라는 집합에 1, 2, 3, 4, 5, 6, 7 값을 넣었고, b라는 집합에는 2, 3, 4, 8, 9, 10의 값을 넣어 저장하였다. 그다음으로는 print() 함수를 통해 a 집합의 값과 b 집합의 값을 출력하여 이 프로그램을 사용하는 사용자에게 보여주도록 하였다.

집합이 정해져 있는 상황에서 구하고 싶은 집합을 선택하여 출력하도록 하는데, while 반복문을 사용하여 반복적으로 집합을 구할 수 있도록 하였다. 또한 반복문에 if 조건문을 넣었고, 이 조건문은 select 변수를 사용하여 1~3 값을 입력받고 입력받은 값에 따라 1을 선택하면 합집합, 2를 선택하면 교집합, 3을 선택하면 차집합, 4를 선택하면 종료되도록 하였다. 따라서 만약 select에 1 값을 넣었다면, if 조건문에서 “print(“a와 b의 합집합 : ”, a|b)”이 실행되는데 여기서 a|b는 a 집합과 b 집합을 합한 값을 뜻하게 된다. 그래서 만약 이 값을 출력해보면 값은 “1, 2, 3, 4, 5, 6, 7, 8, 9, 10”이 된다. 다음으로 select의 값이 2가 됐을 경우에는 “elif(select==2)”의 조건문이 실행되어 교집합이 구해지게 되는데, “print("a와 b 집합의 교집합 : ", a&b)” 이 교집합을 구하여 출력하는 코딩이다. 여기서 a&b는 a 집합에 있는 값이 b 집합에 있는 값을 뜻하게 되는데, 이 값을 출력해보면, “2, 3, 4”라고 출력하여 교집합에 값과 같다는 것을 알 수 있다. 그리고 select의 값이 3일 경우에는 “elif(select==3):”의 조건문이 실행되어 차집합을 구하여 출력하게 된다. 따라서 이 조건문 안에 있는 프로그램 코딩을 보면, “print("a에서 b를 뺀 차집합 : ", a-b)”으로 프로그램 코딩되어 있는데, 여기서 a-b의 연산 부분이 차집합에 해당된다. 그런데 a-b라는 것은 빼기라는 연산자로서의 역할을 하지만 빼기를 실행할 연산자가 튜플이므로, a 집합에서 b 집합을 빼고난 나머지의 집합을 뜻하게 된다. 따라서 출력된 것을 살펴보면 a 집합에서 b 집합을 뺀 “1, 5, 6, 7”이 출력되게 된다. 그리고 마지막으로 select의 값이 4 이상 되면 else 조건문이 실행되어 break를 통해 while 반복문을 빠져나오고, 함수는 끝나게 된다.


2) 절댓값을 구하는 함수 선언

두 번째로 만나볼 함수는 절댓값을 구하는 함수이다. 절댓값을 구하는 함수는 음수를 넣어도 절댓값으로 변환되어 출력되는 함수로써 이름은 absolute이다. 아래의 absolute() 함수를 자세히 살펴보며 하나씩 알아보도록 하자.

def absolute(): # 절댓값을 구하는 함수


    number=int(input("구하고 싶은 절댓값을 입력하시오.")) # 값을 입력


    result=abs(number) # 절댓값 내장함수를 이용하여 결과에 값 입력


    print("절댓값은", result, "입니다") # 절댓값 출력


    return

절댓값을 구하는 함수는 프로그램 코딩이 3줄로 되어 있다. 가장 첫 번째줄 프로그램 코딩은 값을 입력받는 부분부터 시작하는데, number에 input() 함수를 이용하여 값을 입력받아 저장하게 된다. 여기서 중요한 점은 int인데, input() 함수만을 입력했을 때는 입력된 숫자를 문자로 인식하게 된다. 따라서 다음 프로그램 코딩을 사용하지 못하고, 에러를 나타내게 된다. 따라서 input 함수 앞에 int를 사용하여 입력받는 값이 숫자임을 나타내줘야 한다. 이렇게 number 변수에 값을 입력을 받았다면, 이 값을 내장 함수인 abs(number)에 인자 값으로 넘겨주게 된다. abs() 함수는 number 값을 절댓값으로 변환하여 반환하여 주는데 그 값은 result 변수에 저장되게 된다. 그리고 마지막으로는 절댓값을 print() 문을 통해서 값을 출력하여 주고, 함수를 끝낸다.


3) 거듭제곱을 구하는 함수 선언

마지막 세 번째의 함수는 거듭제곱을 구하는 함수이다. 거듭제곱 함수는 거듭제곱하고자 하는 값을 지수 값만큼 곱하여 값을 계산하여 출력하는 프로그램이다. 거듭제곱을 구하는 함수의 이름은 power이며, 아래의 power()를 보고, 자세히 하나씩 학습하여 보도록 하자.

def power(): # 거듭제곱을 구하는 함수


    # 거듭제곱의 아래 값 입력

    number=int(input("구하고 싶은 거듭제곱의 아래 값을 입력하시오."))

    # 거듭제곱의 지수 값 입력

    number2=int(input("지수 값을 입력하시오."))


    result=number ** number2 # 거듭제곱 구하기

    print("거듭제곱의 값은", result, "입니다") # 결과값 출력

    return

거듭제곱을 구하는 함수는 두 가지 변수를 받게 된다. 하나는 거듭제곱할 값을 저장 받는 Number 변수와 지수 값을 저장하는 Number2 변숫값을 입력받게 된다.

그런데 프로그램 코딩을 보면, “Number=int(input("구하고 싶은 거듭제곱의 아래 값을 입력하시오."))”와 같이 되어 있는데 input() 앞에 int()를 두어, 입력받는 값을 문자열 데이터가 아닌 정수형 데이터로 변환하여 입력받을 수 있도록 하였다.

이렇게 Number 변수와 Number2 변수에 값이 저장되었다면, 거듭제곱할 수를 지수만큼 제곱하기 위해서 “**”연산자를 사용하여 거듭제곱하게 된다. “result=number ** number2”의 프로그램 코딩 부분이 거듭제곱하여 값을 result 변수에 저장하게 되는데, number의 값을 number2의 값만큼 거듭제곱하여 그 값을 저장한다는 프로그램 코딩이다.

마지막으로 거듭제곱의 값이 구해졌다면 프로그램을 사용하는 사용자에게 값을 출력하여 보여줘야 하는데, result 변수에 값이 저장되어 있음으로 print()함수를 이용하여 값을 출력해주면 된다. 그리고 모든 작업이 끝났다면 이 함수는 반환 값이 없이 함수를 끝마치게 된다.


4) 수학 연산 프로그램 실행

지금까지 수학 연산 프로그램에 사용되는 모든 함수를 살펴보았다. 그렇다면 이 함수들이 실제적으로 어떻게 호출되고 실행되는지를 아래의 실행 부분을 보면서 알아보도록 하자.

print("재미있는 수학을 계산해주는 프로그램입니다.") # 화면에 출력


while True:

    # 수학 연산 중 원하는 프로그램 선택

    print("수학 연산 프로그램입니다.")

    # select 값 입력

    select=int(input("1. 집합 연산 2. 절댓값 3. 거듭제곱 4. 종료"))


    if(select==1): # select 변숫값이 1인 경우

        print("집합을 구하는 프로그램입니다.")

        set() # 집합 함수 호출

    elif(select==2): # select 변숫값이 2인 경우

        print("절댓값을 구하는 프로그램입니다.")

        absolute() # 절댓값 함수 호출

    elif(select= 3): # select 변숫값이 3인 경우

        print("거듭제곱을 구하는 프로그램입니다.")

        power() # 거듭제곱 함수 호출

    else:

        break

가장 먼저 이 프로그램이 어떤 프로그램인지 print() 함수로 출력했다. 그다음으로는 while 반복문으로 사용자가 프로그램을 종료하기 전까지 if 조건문을 주어 어떤 함수를 선택하여 수학 연산을 할지 선택할 수 있도록 하였다.

따라서 이 반복문에서도 select 변수가 나오게 되는데, select 변수는 input() 함수로 값을 입력받아 조건문을 실행하게 된다. select 변수의 값이 1인 경우에는 집합을 구하는 함수인 set()함수가 호출되게 된다. 그리고 set 함수 안에 있는 프로그램 코딩을 실행한 후 반환된 값이 없이 조건문을 빠져나오게 된다. 그리고 select 변수의 값이 2인 경우에는 “elif(select==2):”의 조건문이 실행되고 절댓값을 구하는 함수인 absolute() 함수가 호출되게 되며, 절댓값을 구하는 함수의 프로그램 코딩이 실행되고 절댓값을 구한 후 출력되었다면 반환 값이 없이 끝마치고 조건문을 빠져나오게 된다. 마지막으로 select 변수의 값이 3인 경우에는 “elif(select==3):” 거듭제곱의 구하는 함수인 power() 함수가 실행되게 된다. 인자로 받는 값은 없으며, 함수 안에 있는 거듭제곱을 구하는 프로그램 코딩이 실행되게 되며 거듭 제곱의 값을 구하고 프로그램 사용자에게 값을 출력을 한 후 반환 값이 없이 조건문을 빠져 나오게 된다.

그리고 더 이상 수학 연산 프로그램을 사용하고 싶지 않다면 select의 값을 4 이상을 주어 else 조건문을 이용하여 break를 통해 while 반복문을 빠져나와 프로그램을 종료하게 된다.