蒙塔卡洛方法:四分之一圆 / 正方形
利用 random() 函数生成随机点
for …in 循环;
pow(x ** 2 + y ** 2,0.5) 小于 圆半径1的计数(点数越多越精确)
自己尝试写的代码:
import random
def judge(a,b):
if pow(a ** 2 + b ** 2 ,0.5) <= 1.0:
return True
else :
return False
points,n = 1000 * 1000 ,0
for i in range(points):
x,y = random.random(),random.random()
if judge(x,y):
n += 1
print("圆周率的估算:{}".format(4*(n / points)))
结果:圆周率的估算:3.141376
资料中的代码:
from random import random """ 上下对比,利用 from random import random 可以减少 上面的
random.random() 的累赘 """
from time import perf_counter
DARTS = 1000 * 1000
hits = 0.0
start = perf_counter()
for i in range(1,DARTS+1): """ 对于 range(1,DARTS+1) 我觉得和 range(DARTS)区别不大,
因为下面的代码并没有使用到i这个变量 """
x,y = random(),random()
dist = pow(x ** 2 + y ** 2 ,0.5)
if dist <= 1.0:
hits += 1
pi = 4 * (hits / DARTS)
print("圆周率的数值为:{}".format(pi))
print("运行时间是:{:.5f}".format(perf_counter() - start))
结果:圆周率的数值为:3.1407
运行时间是:0.83409