# 蒙特卡洛计算π值演示程序
import time
from random import random
from math import sqrt
import turtle
import sys
# 初始化
DARTS = int(input()) # 输入投点次数
hits = 0 # 范围内次数的初始化
start_time = time.time() # time模块里的函数,用于获取当前时间戳(以秒为单位)
# 设置绘图窗口
turtle.setup(800, 800, startx=100, starty=100) # 设置Turtle 绘图窗口的大小和位置,像素是800*800,默认起始位置以屏幕左上角为原点,是(100,100)
turtle.speed(0) # 以下为一些绘图的参数,绘图速度,画笔宽度。
turtle.pensize(2)
# 绘图操作
for i in range(1, DARTS + 1):
x, y = random(), random()
x_squared, y_squared = x ** 2, y ** 2
dist = sqrt(x_squared + y_squared) # 计算两点间距离
turtle.penup() # 抬起画笔
turtle.goto(x * 200, y * 200)
turtle.pendown() # 落下画笔,继续画
# 判断圆内和圆外
if dist <= 1.0:
hits += 1
turtle.dot(6, "red")
else:
turtle.dot(6, 'blue')
# 这段代码的作用是在控制台上显示下载进度条。当 i 值增加时,根据 j 值的变化,每下载完成 10% 数据时更新一次进度条显示,直到下载完成
j = int(i / (DARTS / 100))
if j % 10 == 0:
print("\rDownload progress: {:.2f}%".format(j), end="") # 格式化输出
sys.stdout.flush() # 强制刷新输出缓冲区,确保信息立即显示在屏幕上而不是保留在缓冲区等待显示
time.sleep(0.01) # 使程序暂停执行 0.01 秒,模拟下载的时间
# 动态显示π计算变化过程
pi = 4 * (hits / DARTS)
print("pi值是{}。".format(pi))
# 蒙特卡洛模拟,计算π的值
pi = 4 * (hits / DARTS)
end_time = time.time() # 再次获取当前时间戳
turtle.exitonclick() # 单击图形界面来关闭绘图窗口,也可使用 turtle.done()
print("\n")
print("pi值是{}。".format(pi))
print("运行时间是:{:.5f}s".format(end_time - start_time)) # 格式化输出
蒙特卡洛计算 π值演示程序——西电电院Python大作业
最新推荐文章于 2024-03-12 22:14:54 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)