蒙特卡罗方法求圆周率π和绘制7段数码管

今日主讲蒙特卡罗方法求圆周率π绘制7段数码管
蒙特卡罗
蒙特卡罗方法就是撒点(也就是随机数),撒出无数点(尽量多的点),计算满足条件的点个数占总个数的比例,广泛应用于各类概率性问题,今天我们就用这个思想求π
如下图所示,对正方形区域进行撒点,用.random()得出点的x,y,然后用距离公式判断点是否在圆上
在这里插入图片描述在这里插入图片描述

#π.py
from random import random
from time import perf_counter
DARTS = 1000*1000#dart中文意思是飞镖
hits = 0.0
start = perf_counter()
for i in range(1, DARTS+1):
	x, y = random(), random()
	dist = pow(x ** 2 + y ** 2, 0.5)
	if dist <= 1.0:
		hits = hits + 1
pi = 4 * (hits/DARTS)#乘4是因为hits/DARTS求的是第一象限1/4圆的面积
print("圆周率值是: {}".format(pi))
print("运行时间是: {:.10f}s".format(perf_counter() - start))

结果具有存在随机性,偶然性,且因为撒点个数不多,有点不太精准
在这里插入图片描述
绘制七段数码管
在这里插入图片描述
难点:

  1. 有些线不画
  2. 如何写出依次写出年月日
#SevenDigitsDrawV2.py
import turtle, time
def drawGap(): #绘制数码管间隔
    turtle.penup()
    turtle.fd(5)
def drawLine(draw):#绘制单段数码管
    drawGap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    drawGap()
    turtle.right(90)
def drawDigit(d): #根据数字绘制七段数码管
    drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)
    #绘制2,3,4,5,6,8,9时第一笔是画的,以下代码考虑之后的六笔 画or不画
    drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if d in [0,2,6,8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(20)
def drawDate(date):
    turtle.pencolor("red")
    for i in date:
        if i == '-':
            turtle.write('年',font=("Arial", 18, "normal"))
            turtle.pencolor("green")
            turtle.fd(40)
        elif i == '=':
            turtle.write('月',font=("Arial", 18, "normal"))
            turtle.pencolor("blue")
            turtle.fd(40)
        elif i == '+':
            turtle.write('日',font=("Arial", 18, "normal"))
         #用font()确定字体系列,大小,样式normal(正常),italic(斜体)
        #用-=+来判断写年月日
        else:
            drawDigit(eval(i))
def main():
    turtle.setup(800, 350, 200, 200)
    turtle.penup()
    turtle.fd(-350)
    turtle.pensize(5)
  #    drawDate('2018-10=10+')
    drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
    #按一定格式读出计算机中此时的时间,入门五讲过time库
    turtle.hideturtle()
    turtle.done()
main()

这段代码运用了time库和turtle库,前面都有讲过哦
在这里插入图片描述今天的内容是不是有趣点了,当然也有点难了,好好理解吧!
88,明天见!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿健也会编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值