Python 파이썬] 분수 약분 방법을 함수로 구현; Reduce a Fraction
Saturday, March 24, 2007
스폰서 링크파이썬은 수학에 강한 언어이지만, 분수를 약분하는 함수는 없었습니다.
분수를 약분하는 함수를 만드는 방법입니다. 아래의 reduceFraction 이라는 함수가 완성된 결과입니다.
참고로 컴퓨터에서는 분수 "2분의 1"을, "1/2"로 표현합니다.
분수 약분 예제
스크립트 파일명: example.py
분수 약분 계산기 (온라인) / 분자 분모 마이너스 부호 처리: ▶▶ 분수 약분 계산기: reduce a Frac Calc
분수를 약분하는 함수를 만드는 방법입니다. 아래의 reduceFraction 이라는 함수가 완성된 결과입니다.
참고로 컴퓨터에서는 분수 "2분의 1"을, "1/2"로 표현합니다.
분수 약분 예제
스크립트 파일명: example.py
#!/usr/bin/python
# -*- coding: cp949 -*-
# 분수 출력 함수
# (분자 분모가 든 리스트 입력받아 출력)
def printFraction(bunsu):
print "%d/%d" % (bunsu[0], bunsu[1])
# 최대 공약수 계산 메서드
# (Euclidean Algorithm; Euclid's Algorithm)
def gcd(a, b):
while (b != 0):
temp = a % b
a = b
b = temp
return abs(a)
# 분수 약분 함수 (Reduce a Fraction)
# 분자 분모를 입력받아, 약분 후, 분자 분모가 든 배열을 반환
def reduceFraction(bunja, bunmo):
frac = [ bunja, bunmo ]
if (frac[1] == 0): # 분모가 0일 경우에 에러 반환
frac[0] = 0
frac[1] = 0
return frac
gcd_result = gcd(frac[0], frac[1])
frac[0] = frac[0] / gcd_result
frac[1] = frac[1] / gcd_result
return frac
########## 여기 이하부터는 약분 테스트 ###########
# 5/10 (10분의 5)
printFraction(reduceFraction(5, 10));
# 출력 결과: 1/2
# 1/2 (2분의 1)
printFraction(reduceFraction(1, 2));
# 출력 결과: 1/2
# 2940/3150 (3150분의 2940)
printFraction(reduceFraction(2940, 3150));
# 출력 결과: 14/15
# 6/63 (63분의 6)
printFraction(reduceFraction(6, 63));
# 출력 결과: 2/21
# 63/6 (6분의 63)
printFraction(reduceFraction(63, 6));
# 출력 결과: 21/2
# 1/1 (1분의 1)
printFraction(reduceFraction(1, 1));
# 출력 결과: 1/1
# 555/555 (555분의 555)
printFraction(reduceFraction(555, 555));
# 출력 결과: 1/1
# 0/1 (1분의 0)
printFraction(reduceFraction(0, 1));
# 출력 결과: 0/1
# 1/0 (0분의 1)
printFraction(reduceFraction(1, 0));
# 출력 결과 (에러): 0/0
# 분모가 0이 될 수는 없음
# 0/0 (0분의 0)
printFraction(reduceFraction(0, 0));
# 출력 결과 (에러): 0/0
# -*- coding: cp949 -*-
# 분수 출력 함수
# (분자 분모가 든 리스트 입력받아 출력)
def printFraction(bunsu):
print "%d/%d" % (bunsu[0], bunsu[1])
# 최대 공약수 계산 메서드
# (Euclidean Algorithm; Euclid's Algorithm)
def gcd(a, b):
while (b != 0):
temp = a % b
a = b
b = temp
return abs(a)
# 분수 약분 함수 (Reduce a Fraction)
# 분자 분모를 입력받아, 약분 후, 분자 분모가 든 배열을 반환
def reduceFraction(bunja, bunmo):
frac = [ bunja, bunmo ]
if (frac[1] == 0): # 분모가 0일 경우에 에러 반환
frac[0] = 0
frac[1] = 0
return frac
gcd_result = gcd(frac[0], frac[1])
frac[0] = frac[0] / gcd_result
frac[1] = frac[1] / gcd_result
return frac
########## 여기 이하부터는 약분 테스트 ###########
# 5/10 (10분의 5)
printFraction(reduceFraction(5, 10));
# 출력 결과: 1/2
# 1/2 (2분의 1)
printFraction(reduceFraction(1, 2));
# 출력 결과: 1/2
# 2940/3150 (3150분의 2940)
printFraction(reduceFraction(2940, 3150));
# 출력 결과: 14/15
# 6/63 (63분의 6)
printFraction(reduceFraction(6, 63));
# 출력 결과: 2/21
# 63/6 (6분의 63)
printFraction(reduceFraction(63, 6));
# 출력 결과: 21/2
# 1/1 (1분의 1)
printFraction(reduceFraction(1, 1));
# 출력 결과: 1/1
# 555/555 (555분의 555)
printFraction(reduceFraction(555, 555));
# 출력 결과: 1/1
# 0/1 (1분의 0)
printFraction(reduceFraction(0, 1));
# 출력 결과: 0/1
# 1/0 (0분의 1)
printFraction(reduceFraction(1, 0));
# 출력 결과 (에러): 0/0
# 분모가 0이 될 수는 없음
# 0/0 (0분의 0)
printFraction(reduceFraction(0, 0));
# 출력 결과 (에러): 0/0
분수 약분 계산기 (온라인) / 분자 분모 마이너스 부호 처리: ▶▶ 분수 약분 계산기: reduce a Frac Calc
더 읽기:
☞ Python | 파이썬
Post a Comment
<< Home