Python割圆法求π(圆周率)

本期代码难度较小 有些人可以直接尝试

由于是我的早期代码 所以有些地方没有修缮 但我敢保证这些都是我写的

先给大家放代码 对这篇文章感兴趣的人接着往下看

import turtle as t
a=int(input('分割次数'))
t.tracer(0)
t.pensize(1)
r=200
t.penup()
t.goto(0,-r)
t.pendown()
t.fillcolor('red')
t.begin_fill()
t.pencolor('darkgreen')
t.circle(r)
t.end_fill()
t.penup()
t.goto(0,0)
t.pendown()
t.pencolor('darkred')
for i in range(a):
    t.forward(r)
    if i==1:
        b=t.distance(200,0)
    t.goto(0,0)
    t.left(360/a)
t.update()
c=a*b
print('所有的边长的和为',c)
d=c/(2*r)
print('π的近似值为:',d)

_____________________________________________________________________________

先看一下pi的概念:pi=周长/直径

割圆法就是把〇分成n瓣 接着排列成一个平行四边形

看下图:

这会让结果与圆周率无限逼近 但是却永远达不到

可圆周率这东西只要够用就可以了 并且真要算起来 可算不到头

比如想算地球周长 只要圆周率小数点后15位就能把误差控制在1厘米

而算宇宙周长 则只需要圆周率小数点后第32位就能把误差控制在1厘米

_____________________________________________________________________________下面是正文:

第一步.基础设置:

import turtle as t#导入turtle
a=int(input('分割次数'))#把圆分成a瓣
t.tracer(0)#以最快度运行
r=200#初始半径为200
t.pu()#不让画笔留下痕迹
t.goto(0,-r)#去0,0-r的位置
t.pd()#让画笔留下痕迹

 _____________________________________________________________________________

第二步.画圆

t.fillcolor('red')#把填充颜色设为红色
t.begin_fill()#开始填充
t.pencolor('darkgreen')#把画笔颜色改为深红色
t.circle(r)#画一个半径为r的圆
t.end_fill()#填充完毕

_____________________________________________________________________________

第三步.为分割做准备

t.penup()#不让画笔留下痕迹
t.goto(0,0)#让画笔去0,0的位置
t.pendown()#让画笔留下痕迹
t.pencolor('darkred')#把画笔颜色设为深红色

_____________________________________________________________________________

第四步.分割

for i in range(a):#分a次
    t.forward(r)#画出其中一条半径
    #A点坐标(200,0)
    if i==1:#当i为1的时候,画第二条边到B点
        b=t.distance(200,0)#测量此时画笔位置到200,0的直线位置
    t.goto(0,0)#去原点
    t.left(360/a)#转弯

_____________________________________________________________________________

第五步.收尾工作

t.hideturtle()#隐藏画笔
t.update()#刷新画面
c=a*b#获得所有边长和
print('所有的边长的和为',c)
d=c/(2*r)#通过公式求出算出的pi的近似值
print('π的近似值为:',d)

_____________________________________________________________________________

优化:

def pi(n):
    import turtle
    t=turtle.Turtle()
    t.tracer(0)
    t.pensize(1)
    r=200
    t.pu()
    t.goto(0,-r)
    t.pd()
    t.fillcolor('red')
    t.begin_fill()
    t.color('darkgreen')
    t.circle(r)
    t.end_fill()
    t.pu()
    t.goto(0,0)
    t.pd()
    for i in range(a):
        t.fd(r)
        if i==1:
            b=t.distance(200,0)
        t.goto(0,0)
        t.left(360/a)
    t.ht()
    t.update()
    return a*b/(2*r)
a=int(input('分割次数:'))
print('π的近似值为:',pi(a))

MVP结算:

本期字数:2135

本期质量分:67

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值