python3 題解(29 祖沖之割圓法求圓周率)

2021-09-28 15:00:20 字數 1003 閱讀 7163

【問題】我們可能都 聽說過祖沖之用割圓法把圓周率計算到小數後7位。但具體是怎麼操作的,可能就不太清楚了。其實從今天看來,原理很簡單。

圓的內接正多邊形的周長,比較接近圓的周長。

邊數越多,越接近。

如果已知了正 n 邊形的邊長,可如下圖,把它變成正 2n 邊形(每條邊**為兩條)。

圖中,紅色為原來的邊。藍色為**後的新邊。

已知了半徑,原來的邊長,根據勾股定理,很容易求出藍邊的長度。

把這個過程繼續下去,就可以讓多邊形的周長很接近圓的周長了。

請程式設計,用此法求圓周率值。

分析:不妨把半徑定為1。

初始的多邊形設為正六邊形比較好。因為它長邊長等於半徑。

import math

defzu

(n):

## 假設邊長為1

deff

(x):

## 由當前邊長,求割後邊長

h =1- math.sqrt(1-

(x/2)**

2)return math.sqrt(h**2+

(a/2)**

2)a =

1## 初始邊長

k =6## 初始邊數

for i in

range

(n):

a = f(a)

k *=

2return a * k /

2if __name__ ==

'__main__'

:print

(zu(10)

)print

(math.pi)

可以看到,這個方法的收斂速度很快。

只迭代了10次,就已經很精確了。

需要補基礎的,可以看:小甲魚pyhthon教程,bilibili站上還有:[耿老師]小甲魚python作業 解析系列,持續更新中。

python3 題解(14)蛇形填充矩陣

問題 用 1 n 2n 2 n2的數字蛇形填充 n 階矩陣。當 n 5 的時候,如下 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15 20 19 18 17 16 21 22 23 24 25最直觀的方式是模擬實際填充過程。遇到出界情況換下一行,填充方向改變。這樣做,需要儲存...

python3 題解(34 棋盤放麥子)

問題 西洋棋的棋盤有共有64格。傳說國王為獎勵它的發明人,答應了他的乙個 小 要求。在棋盤的第1格放1粒小麥,第2格放2粒,第3格放4粒,第4格放8粒 每一格是前一格數目的2倍。這一共是多少小麥呢?是個天文數字!請你利用計算機計算,準確地說,到底是多少小麥。分析 實際上就是求 1 2 4 8 一共湊...

python3 切片 python3 切片

取乙個list或tuple的部分元素是非常常見的操作。比如,乙個list如下 l michael sarah tracy bob jack 取前3個元素,應該怎麼做?笨辦法 l 0 l 1 l 2 michael sarah tracy 之所以是笨辦法是因為擴充套件一下,取前n個元素就沒轍了。取前n...