提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

最近想学习python,在MOOC上找到一个精品课程,觉得老师讲得很好,也很具有实践操作性。还没很好地掌握编程学习笔记的方法,先在csdn里进行记录。
今天学习的是计算圆周率的方法。内容在《Python语言程序设计》的第四周课程中。


提示:以下是本篇文章正文内容,下面案例可供参考

一、计算圆周率

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、两种程序实现方法

1.公式计算方法

在这里插入图片描述
代码如下(示例):

#CalPiV1.py
pi = 0
N = 100
start = perf_counter()#起始时间
for k in range(N):
    pi += 1/pow(16,k)*(4/(8*k+1) - 2/(8*k+4) - 1/(8*k+5) - 1/(8*k+6)) #\换行
print("圆周率值是:{}".format(pi))
print("运行时间是:{:.5f}s".format(perf_counter()-start)) 

我运行的结果是:
圆周率值是:3.141592653589793
运行时间是:0.00051s
速度很快,而且很准确。

2.蒙特卡罗方法

在这里插入图片描述
计算抛点总数量DARTS,计算在圆的内部的点的总数量hits。
圆周率=4*hits/DARTS.
代码如下(示例):

#CalPiV2.py
from random import random
from time import perf_counter
DARTS = 1000*1000 #当前区域中抛洒点总数量
hits = 0.0 #当前在圆内部点的数量
start = perf_counter()#起始时间
for i in range(1,DARTS+1): #循环撒点的过程,即遍历循环的过程
    x,y = random(),random() #产生随机坐标值,random返回的是(0,1)之间的随机值,而所选区域的坐标X,Y范围正好也是0-1.
    dist = pow(x**2+y**2,0.5) #计算点到圆心的距离,判断是否小于1,小于1则在圆内,对hits+1
    if dist <= 1.0:
        hits =hits + 1
pi = 4 * (hits/DARTS)
print("圆周率值是:{}".format(pi))
print("运行时间是:{:.5f}s".format(perf_counter()-start)) 

多次运行数据:
1.
圆周率值是:3.138892
运行时间是:0.71723s
2.
圆周率值是:3.141072
运行时间是:0.72293s
可以看到数据不是很准确,时间相对较长。

当点数为现在的10倍,

#CalPiV2.py
from random import random
from time import perf_counter
DARTS = 1000*1000*10 #当前区域中抛洒点总数量
hits = 0.0 #当前在圆内部点的数量
start = perf_counter()#起始时间
for i in range(1,DARTS+1): #循环撒点的过程,即遍历循环的过程
    x,y = random(),random() #产生随机坐标值,random返回的是(0,1)之间的随机值,而所选区域的坐标X,Y范围正好也是0-1.
    dist = pow(x**2+y**2,0.5) #计算点到圆心的距离,判断是否小于1,小于1则在圆内,对hits+1
    if dist <= 1.0:
        hits =hits + 1
pi = 4 * (hits/DARTS)
print("圆周率值是:{}".format(pi))
print("运行时间是:{:.5f}s".format(perf_counter()-start)) 

运行结果:
圆周率值是:3.141146
运行时间是:7.19552s


总结

该课学习了圆周率的计算方法,掌握了随机数的函数应用和for循环的应用。并采用了多种方法来计算圆周率,进行简单对比。