翼度科技»论坛 编程开发 python 查看内容

用python计算圆周率PI,并显示进度条

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
用python计算圆周率PI

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬描述
用python计算圆周率PI‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬1.要求能算到小数点后面越多越好(5分)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬2.并用进度条提示算的进度,能给出多种进度条越好(5分)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪3.要求给出算圆周率Pi具体公式或者算法说明
 
一、具体公式:
莱布尼茨公式
π/4=1-1/3+1/5-1/7+1/9-1/11+……
蒙特卡罗法(打鸟法)
一个正方形内部相切一个圆,圆和正方形的面积之比是π/4。 
在这个正方形内部,随机产生n个点(这些点服从均匀分布),计算它们与中心点的距离是否大于圆的半径,以此判断是否落在圆的内部。
统计圆内的点数,与n的比值乘以4,就是π的值。理论上,n越大,计算的π值越准。
二、代码如下:
(1)、蒙特卡罗法(打鸟法)
  1. import math
  2. import time
  3. scale=10
  4. print("执行开始")
  5. t=time.process_time()
  6. for i in range(scale+1):
  7.     a,b='**'*i,'..'*(scale-i)
  8.     c=(i/scale)*100
  9.     π=4*(4*math.atan(1/5)-math.atan(1/239))
  10.     print("[{:3}{}->{}%]".format(a,b,c))
  11.     time.sleep(0.1)
  12. print("π =",format(π))
  13. print("运行时间:{:.2f}s".format(t))
  14. print("执行结束")
复制代码
 
运行结果如下:

 
(2)、莱布尼兹公式
  1. import time
  2. import math
  3. total,s,n,t=0.0,1,1.0,1.0
  4. while(math.fabs(t)>=1e-6):
  5.     total+=t
  6.     n+=2
  7.     s=-s
  8.     t=s/n
  9. k=total*4
  10. scale=50
  11. print("".center(scale//2,"-"))
  12. start = time.perf_counter()
  13. for i in range(scale+1):
  14.     a="*"*i
  15.     b="."*(scale-i)
  16.     c=(i/scale)*100
  17.     d=time.perf_counter() - start
  18.     print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,d),end='')
  19.     time.sleep(0.1)
  20. print("\n π值是{:.10f}".format(k))
复制代码
 
运行结果如下:

 
(3)、莱布尼兹公式
  1. import time
  2. import math
  3.   
  4.   
  5. class Index(object):
  6.     def __init__(self, number=50, decimal=2):
  7.         self.decimal = decimal
  8.         self.number = number
  9.         self.a = 100/number  
  10.   
  11.     def __call__(self, now, total):
  12.         percentage = self.percentage_number(now, total)
  13.         well_num = int(percentage / self.a)
  14.         progress_bar_num = self.progress_bar(well_num)
  15.         result = "\r%s %s" % (progress_bar_num, percentage)
  16.         return result
  17.   
  18.     def percentage_number(self, now, total):
  19.         return round(now / total * 100, self.decimal)
  20.   
  21.     def progress_bar(self, num):
  22.         well_num = "#" * num
  23.         space_num = " " * (self.number - num)
  24.         return '[%s%s]' % (well_num, space_num)
  25.   
  26.   
  27.   
  28. index = Index()
  29. total,s,n,t=0.0,1,1.0,1.0
  30. while(math.fabs(t)>=1e-6):
  31.     total+=t
  32.     n+=2
  33.     s=-s
  34.     t=s/n
  35. k=total*4
  36.   
  37. start = 371
  38. for i in range(start + 1):
  39.     print(index(i, start), end='')
  40.     time.sleep(0.01)
  41.      
  42.      
  43. print("\n π值是{:.10f}".format(k))
复制代码
 
运行结果如下:

 

来源:https://www.cnblogs.com/Yleina/p/17786632.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具