Python-高级进度条圆周率计算
一、圆周率的计算
方法一:采用蒙特卡罗方法,利用random库,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。
详情请看随笔: Python-圆周率的计算【random库的应用】
方法二:梅钦公式:
方法三:一般计算公式
二、普通进度条圆周率计算
【例】梅钦公式计算的普通进度条圆周率计算
import math import time scale=10 print("执行开始") t=time.process_time() for i in range(scale+1): a,b='**'*i,'..'*(scale-i) c=(i/scale)*100 π=4*(4*math.atan(1/5)-math.atan(1/239)) print("[{:3}{}->{}%]".format(a,b,c)) time.sleep(0.1) print(π) print("{:.3f}s".format(t)) print("执行结束")
三、高级进度条圆周率计算
【例】使用蒙特卡罗方法
from random import seed #调用random中函数seed()获取随机数种子 from random import random #调用random中函数random() import time #导入时间模块 DARTS= 5000 #撒点数量,数越大越准 scale = 50 #文本进度条大概宽度 seed(123) #获取唯一确定的随机数列 hits= 0.0 #开始时命中圆内部的数量 print('\n{:=^70}'.format('计算开始')) start = time.perf_counter() 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%100 == 0: #每撒点100个计时一次,共计50次 k = i //100 a = '*'*k b = '.'*(scale-k) c = (k/scale)*100 dur = time.perf_counter() - start print("\r{:^3.0f}% [{}->{}] {:.2f}s" .format(c,a,b,dur)) pi= 4*(hits/ DARTS) #得到圆周率的近似值 print("{:.50f}".format(pi)) #保留小数点后50位 print('\n{:=^70}'.format('计算完成'))