私はPythonを始めたばかりです。
これはギアレート計算機用です。
367 から 7645373 の範囲の 5000 個の整数と元の分数のリストがあります。1/10 または 34561/43521 から 10/1 の可能性があります。
表に存在する分子と分母から、元の分数に近い値を持つ新しい分数を作成する必要があります。
実際、元の分数からの偏差でソートされた一致のリストが必要です。
私には解決策がありますが、367/3670 または 368/3680 または 4352/43520 のような解決策は同等であるため、値が 1/10 の結果を得るには時間がかかります。
Pythonistはどのようにそれを行うでしょうか?
Cライブラリの場合だなんて言わないでください!:D
乾杯
アントニオ
def searcharatio(l, a):
b = []
mx = l[-1][0]
ln = l[0][0]
ld = l[0][0]
i = max(int(ln/a.numerator-1), int(ld/a.denominator)-1)
print i
while 1:
n = a.numerator * i
d = a.denominator * i
if n > mx or d > mx:
return sorted(b)
if n > 0.9*ln and d > 0.9*ld:
# enumerate es lista 2 elem 0=num orden, 1=elemento
ri = (min(enumerate(l), key=lambda x:abs(x[1][0]-n)))
ro = (min(enumerate(l), key=lambda x:abs(x[1][0]-d)))
ln = ri[1][0]
ld = ro[1][0]
e = [abs(1.0 - ((float(ln)/ld) / (float(n)/d))), i, ri, ro]
b.append(e)
i+=1