비율을 간단하게하는 간단한 방법이 있습니까? 예를 들어 1875:5625:625
은 3:9:1
이됩니다.어떻게 복잡한 비율을 단순화합니까?
저는 파이썬을 사용하고 있습니다. 그렇지만 왜 그런지는 알고 싶습니다.
비율을 간단하게하는 간단한 방법이 있습니까? 예를 들어 1875:5625:625
은 3:9:1
이됩니다.어떻게 복잡한 비율을 단순화합니까?
저는 파이썬을 사용하고 있습니다. 그렇지만 왜 그런지는 알고 싶습니다.
있다 내장 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
비율을 수학적으로 단순화하는 방법은 모든 요인의 최대 공약수 (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입니다.
여전히 문제가 있거나 다른 문제가있는 경우 알려 주시기 바랍니다.
작품을, 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의 특수 메서드 (이 인수는 자체)