본문 바로가기
파이썬

파이썬 - 단순 계산하는 과제 함수 선언해서 쉽게 해결하기

by Tiabet 2023. 4. 12.

학교 수업을 듣는데 교수님께서 과제를 내주셨는데 과제의 내용이 다소 황당했다. 어렵진 않지만 정말 귀찮은 계산을 시키신 것인데, 동기들의 말로는 하다가 손가락이 부러지는 줄 알았다고 하여 나는 애초에 계산기 두들겨 가면서 푸는 건 포기해버렸다. 대신 주피터랩을 켜서 파이썬 코드를 작성하여 10분만에 풀 수 있었다. 어려운 작업은 아니었지만, 코드를 공유해보고자 한다.

 

(본 포스팅에서 사용한 자료는 학교에서 배운 수업자료이고, 수업자료의 출처는 다음과 같습니다.

R. L. Francis and J. A. White, 1974, Facility Layout and Location: An Analytical Approach, Prentice-Hall
S. Chopra and P. Meindl, 2001, Supply Chain Management: Strategy, Planning, and Operation, Prentice Hall. )

 

문제 상황

문제에서 사용해야 하는 공식.
문제

공식을 보면 루트와 제곱, 분수가 굉장히 많아서 계산기를 두들겨가며 풀기 아주 까다로운 것을 확인할 수 있다. 그런데 내가 해야하는 것은 문제에서 생략된 Iteration 2 부터 9 까지 풀이과정을 다 작성해야 한다는 것이었다. 

 

작성한 파이썬 코드

1
2
3
= 4.25
y= 4.0
 
cs

우선 초기 시작점을 선언해주고, 이후에 함수를 작성했다. x와 y를 계속해서 업데이트해줘야 하는 상황이었기 때문에 초기화되는 문제를 피하기 위함이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import numpy as np
import math
 
def g1(x,y) :
    result = (x-0)**2 + (y-0)**2
    result = math.sqrt(result)
    result = 1/result
    return result
 
def g2(x,y) :
    result = (x-0)**2 + (y-10)**2
    result = math.sqrt(result)
    result = 1/result
    return result
 
def g3(x,y):
    result = (x-5)**2 + (y-0)**2
    result = math.sqrt(result)
    result = 1/result
    return result
 
def g4(x,y):
    result = (x-12)**2 + (y-6)**2
    result = math.sqrt(result)
    result = 1/result
    return result
 
print(g1(x,y))
print(g2(x,y))
print(g3(x,y))
print(g4(x,y))
 
cs

g1 부터 g4 까지 def 함수를 이용해 사용자 지정 함수를 생성했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
def update(x,y):
    gravitysum = g1(x,y) + g2(x,y) + g3(x,y) + g4(x,y)
    print(gravitysum)
    x_result = 5*g3(x,y) + 12*g4(x,y)
    print(x_result)
    x_result = x_result/gravitysum
    y_result = 10*g2(x,y) + 6*g4(x,y)
    print(y_result)
    y_result = y_result/gravitysum
    return x_result,y_result
 
x,y = update(x,y)
print(x)
print(y)
cs

그리고 update 함수를 선언, g1 ~ g4 함수를 다시 사용해줌으로써 원하는 방식대로 x와 y를 업데이트해갈 수 있었다.

1
2
3
4
5
6
7
arr = []
 
for _ in range(10):
    arr.append(update(x,y))
    x,y = update(x,y)
 
arr
cs

 

일일이 엔터를 눌러가면서 정답을 확인하기 싫다면 이런식으로 리스트 하나를 생성하고 반복문을 사용해서 결과값들을 한 번에 확인할 수도 있다.

 

문제 자체가 과제로 나온 내용이기도 하고, 배경 지식까지 설명하기엔 너무 내용이 길어질 것 같아서 간단하게 코드를 공유한다는 것에 의미를 두어보았다.