用python計算圓周率PI


一、計算圓周率PI的方法

(一)公式法:

1 #CalPiV1.py
2 pi = 0
3 N = 100
4 for k in range(N):
5      pi += 1/pow(16, k) * (4 / (8 * k + 1) - 2 /(8 * k + 4) - 1/(8 * k + 5) - 1 /(8 * k + 6))
6      print("圓周率值是:{}".format(pi))

(二)蒙特卡羅方法:

 1 #CalPiV2.py
 2 from random import random
 3 from time import perf_counter
 4 DARTS = 1000*1000*10
 5 hits = 0.0
 6 start = perf_counter()
 7 for i in range(1, DARTS+1):
 8     x, y = random(), random()
 9     dist = pow(x**2 + y**2, 0.5)
10     if dist <= 1.0:
11         hits = hits + 1
12 pi = 4 * (hits/DARTS)
13 print("圓周率值是: {}".format(pi))
14 print("運行時間是: {:.5f}s".format(perf_counter()-start))

算法說明:增加DARTS的位數,圓周率PI小數點后的位數就會增加。

(三)程序執行效果如下:  

二、進度條的設計

(一)帶刷新的文本進度條:

 1 #TextProBarV3.py
 2 import time
 3 from tqdm import tqdm
 4 scale = 50
 5 print("執行開始".center(scale//2, "-"))
 6 start = time.perf_counter()
 7 for i in range(scale + 1):
 8     a = '*' * i
 9     b = '.' * (scale - i)
10     c = (i/scale)*100
11     dur = time.perf_counter() - start
12     print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end="")
13     time.sleep(0.1)
14 print("\n"+"執行結束".center(scale//2, '-'))

程序運行結束的靜態圖:

 

三、(一)最終代碼:

 1 from math import sqrt
 2 from tqdm import tqdm
 3 from random import random
 4 import time
 5 DARTS=10000
 6 hits=0.0
 7 t=time.perf_counter()
 8 for i in tqdm(range(1,DARTS+1)):
 9   x,y=random(),random()
10   dist=pow(x**2+y**2, 0.5)
11   if dist<=1.0:
12     hits+=1
13   a='*'*i
14   b='.'*(DARTS+1-i)
15   c=(i/DARTS+1)*100
16   t-=time.perf_counter()
17   time.sleep(0.00001)
18 pi=4*(hits/DARTS)
19 print("Pi值是{}.".format(pi))
20 print("\t{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,-t),end='')
21 print("運行時間是:{:.5f}s".format(time.perf_counter()))

 (二)程序運行效果圖如下:


免責聲明!

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



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