Python練習題 019:求分數序列之和


【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里計算一下,結果跟上面的浮點數一模一樣。好吧……

 

++++++++++++++++++++++++++++++++++++++

題目出處:編程語言入門經典100例【Python版】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM