用python計算圓周率π
一、要求
1.要起義能計算到圓周率后面越多位越好,
2.用進度條顯示計算的進度,能給出越多種進度條越好,
3.要求給出圓周率π的具體公式或者演算法說明,
二、演算法
1、馬青公式:馬青公式每計算一項可以得到1.4位的十進制精度,

2、蒙特卡羅法(我們使用這種方法)
一個正方形內部相切一個圓,圓和正方形的面積之比是π/4,

在這個正方形內部,隨機產生n個點(這些點服從均勻分布),計算它們與中心點的距離是否大于圓的半徑,以此判斷是否落在圓的內部,
統計圓內的點數,與n的比值乘以4,就是π的值,理論上,n越大,計算的π值越準
三、進度條
1、time庫:
(1)perf_counter( )函式,用于測量時間,回傳一個CPU級別的精確時間計數值,單位為妙,由于這個計數值起點不確定,連續呼叫使用差值才有意義,
(2)sleep(s)函式,產生 s妙的休眠時間,可以是浮點數,如time.sleep(3.5),
(3)time.clock()函式,統計cpu時間 的工具,這在統計某一程式或函式的執行速度最為合適,兩次呼叫time.clock()函式的插值即為程式運行的cpu時間,
2、tqdm庫:Tqdm 是一個快速,可擴展的Python進度條,可以在 Python 長回圈中添加一個進度提示資訊,用戶只需要封裝任意的迭代器 tqdm(iterator),
步驟如下:
(1)安裝tqdm
pip install tqd
(2)匯入tqdm庫
from tqdm import tqdm
(3)tqdm示例
for i in tqdm(range(1000000)):
pass
四、演算法實作
1、time庫
from random import random
from time import clock
DARTS=100000
hits = 0.0
a=1
clock()
for i in range(1,DARTS+1):
x,y = random(),random()
dist = pow(x ** 2 + y ** 2,0.5)
if dist<=1.0:
hits = hits + 1
if i== DARTS*0.01*a :
print("\r%{} [{}->{}]".format(a,'*'*a,'-'*(10-a)),end="")
a+=3
pi = 4* (hits/DARTS)
print("\nPi=={:.7f}".format(pi))
print("運行時間為:{:.4f}s".format(clock()))
效果如下:

2、tqdm庫
from math import *
from tqdm import tqdm
from time import *
total,s,n,t=0.0,1,1.0,1.0
clock()
while(fabs(t)>=1e-6):
total+=t
n+=2
s=-s
t=s/n
k=total*4
print("π值是{:.10f} 運行時間為{:.4f}秒".format(k,clock()))
for i in tqdm(range(101)):
print("\r{:3}%".format(i),end="")
sleep((clock())/100) #用執行程式的總時間來算出進度條間隔的時間
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/167453.html
標籤:Python
