• 用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()))

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

  • 相关阅读:
    C++默认参数
    C语言中volatile关键字的作用
    CURL超时处理
    C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
    unix时间戳和localtime
    !!的用处
    linux中grep和egrep的用法
    非阻塞,send后马上close消息能成功发出去吗
    .hpp与.h的区别
    14课作业答疑
  • 原文地址:https://www.cnblogs.com/hx494682/p/12547138.html
Copyright © 2020-2023  润新知