【Python練習題 019】 有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。
-----------------------------------------------
這題似乎也不難,規律是:后一個分數的分子=前一個分數的分子+分母,后一個分數的分母=前一個分數的分子,循環個20次就有結果。注意,假設分子為a,分母為b,雖然 a = a + b,但此時a已經變成 a+b 了,所以再給b重新賦值的時候,得是 (a+b)-b 才能等於原分母b,所以重新賦值時就得寫成 a-b。代碼如下:
sum = 0 a, b = 2, 1 for i in range(20): sum = sum + a/b a = a + b b = a - b print(sum)
輸出結果如下:
32.66026079864164
不過,話說原題用的是分數,經過這么一計算,成了浮點數,精度上會不會有問題呢?想來想去,還是保持分數的形式比較精確吧…… 一查,發現計算分數時得 from fractions import Fraction 才能用。代碼如下:
from fractions import Fraction sum = 0 a, b = 2, 1 for i in range(20): sum = sum + Fraction(a/b) a = a + b b = a - b print(sum)
輸出結果如下:
73544369181292861/2251799813685248
這個分數也夠恐怖的!放到IDLE里計算一下,結果跟上面的浮點數一模一樣。好吧……
++++++++++++++++++++++++++++++++++++++