【問題】我們可能都 聽說過祖沖之用割圓法把圓周率計算到小數後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...