循环结构程序-蒙特卡洛

一个边长为2r的正方形内部相切一个半径为r的圆,圆的面积是πr2,正方形的面积是4πr,两者之比是π/4。因为比值与r大小无关,所以可以假设半径r的值为1。在这个正方形内部,随机产生n个点(x,y),当随机数较多时,可以认为这些点服从均匀分配的规律。计算每个点与中心点的距离是否大于圆的半径(x2+y2>r2),以此判断是否落在圆的内部。如图下所示,通过统计圆内的点数(图中的红色点),与n的比值乘以四,就是π的值。理论上,n越大,计算的π值越准,但由于随机数不能保证完全均匀分布,所以蒙特卡洛法每次计算结果可能不同。本次实训所完成代码功能为实现用蒙特卡洛方法计算π值,分别输出产生随机数量n为1000个.10000,100000;1000000、1000000时,计算出来π的结果。
“填空”处为需要补全的地方
import random # 导入需要使用的random函数库
def monte_carlo_pi(num): """接收表示随机数数量的正整数为参数,返回圆周率的值
结果小数位置按系统默认输出"""
random.seed(0) # 随机数种子,应用确定值可使结果序列一致
hits = 0 # 落在圆内的计数器初值设为 0 填空:
x, y = random.uniform(-1, 1), random.uniform(-1, 1) # 生成两个随机小数模拟一个点的坐标
pos = 填空 # 计算坐标(x,y)到原点的距离
if pos 填空 1.0:

如果距离小于等于1,产生的点位于圆内 hits = hits + 1

return 填空 # 返回要打印输出的结果
if name == 'main': # 主函数入口 times = int(input()) # 输入随机次数
print(monte_carlo_pi(times)) # 输出利用函数计算的圆周率值

img

img

import random 
def monte_carlo_pi(num): 
    random.seed(0) 
    hits = 0 
    for i in range(num):
        x, y = random.uniform(-1, 1), random.uniform(-1, 1) 
        pos = (x**2+y**2)**0.5
        if pos <= 1.0:
            hits=hits+1
    return 4*hits/num 
if __name__ == '__main__': 
    times=1000000
    print(monte_carlo_pi(times))