本期代码难度较小 有些人可以直接尝试
由于是我的早期代码 所以有些地方没有修缮 但我敢保证这些都是我写的
先给大家放代码 对这篇文章感兴趣的人接着往下看
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