zoukankan      html  css  js  c++  java
  • 用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()))

     (二)程序运行效果图如下:

  • 相关阅读:
    169. Majority Element
    283. Move Zeroes
    1331. Rank Transform of an Array
    566. Reshape the Matrix
    985. Sum of Even Numbers After Queries
    1185. Day of the Week
    867. Transpose Matrix
    1217. Play with Chips
    766. Toeplitz Matrix
    1413. Minimum Value to Get Positive Step by Step Sum
  • 原文地址:https://www.cnblogs.com/hx494682/p/12547138.html
Copyright © 2011-2022 走看看