2013-12-11 7 views

답변

2

있다 내장 gcd function in the fractions module 그래서 난 괜찮은 출력을 얻을 수있었습니다을 활용 : 그래서 비에게 주어진

from fractions import gcd 

ratio = '1875:5625:625' 

def solve(ratio): 
    numbers = [int(i) for i in ratio.split(':')] 
    denominater = reduce(gcd,numbers) 
    solved = [i/denominater for i in numbers] 
    return ':'.join(str(i) for i in solved) 

ratio_2_solve = solve(ratio) 
print ratio_2_solve 
#3:9:1 

1875:5625:625 

이 생산하는 것 :

3:9:1 

하지만 그 중 가장 좋은 부분은 아니지만, 다음과 같은 비율을 입력 할 수도 있습니다.

01 23,516,
'1875:5625:625:5000:46875:46250' 

그리고 아직도의 출력을 얻을 : 모두 파이썬 2

3:9:1:8:75:74 
0

비율을 수학적으로 단순화하는 방법은 모든 요인의 최대 공약수 (GCD)를 찾아 각 요인을 해당 GCD 값으로 나눈 값입니다. 예를 들면 다음과 같습니다.

1875 = 625 * 3 
5625 = 625 * 9 
625 = 625 * 1 

so GCD(1875, 5625, 625) = 625 
and 1875:5625:625 can be simplified to 3:9:1 

코드 작성을 시작할 수 있습니다. GCD를 계산하는 일반적인 방법은 Euclidean Algorithm입니다.

여전히 문제가 있거나 다른 문제가있는 경우 알려 주시기 바랍니다.

0

작품을, 3

def simplify(ratio_nums): return list(map(functools.reduce(fractions.gcd, ratio_nms).__rfloordiv__, ratio_nums)) 

비율을 단순화하는 것은 본질적으로 비율로 숫자를 단순화과 동일합니다. 숫자 목록을 단순화하기 위해 GCD (최대 공약수)를 찾아야하며 모든 숫자를 나누어야합니다.

fractions.gcd()은 두 숫자의 GCD를 계산합니다. 여러 숫자의 GCD를 찾으려면 처음 두 숫자를 자신의 GCD로 바꿀 수 있으며 하나의 숫자가 발견 될 때까지 프로세스가 반복됩니다. (GCD (GCD (n1, n2), n3)). 이를 위해 functools.reduce()을 사용할 수 있습니다.이 함수는 인수로 전달 된 함수 (이 경우 fractions.gcd())를 이러한 방식으로 실행합니다. GCD로 모든 숫자를 나눌려면 map (나중에 인수 인 iterables의 요소와 함께 호출되는 첫 번째 인수 인 함수의 반환 값을 반환 함) __rfloordiv__ GCD의 특수 메서드 (이 인수는 자체)