Python初级组测试题之Turtle画图2
1. 画8个内接正五边形
题目描述
解题思路
(1) 共有n=8个正五边形,因而有8次循环,每次旋转角度增加ang=360/n
(2) 画内接正五边形用circle(raduis=50,steps=5)
(3) 设置画笔颜色用pencolor(‘blue’),隐藏画笔hideturtle()
import turtle
n = 8
ang = 360 / n
h = 0
t = turtle.Turtle()
t.hideturtle()
t.pencolor('blue')
t.seth(90)
for i in range(n):
# 每次递增1个ang角度
h = ang * i
# 向左旋转
t.left(h)
# 画内接正五边形
t.circle(radius=50, steps=5)
turtle.done()
2. 画正方形内接圆
题目描述
解题思路
(1) 画正方形用goto最简单,设置坐标每次100
(2) 画圆用circle(raduis=50)刚好直径100,形成内切圆
(3) 设置画笔颜色用pencolor(‘red’),填充颜色fillcolor(‘yellow’),隐藏画笔hideturtle()
(4) 填充开始用begin_fill(),结束填充用end_fill()
import turtle
t=turtle.Turtle()
t.hideturtle()
# 画正方形
t.pencolor('red')
t.goto(0,-100)
t.goto(100,-100)
t.goto(100,0)
t.goto(0,0)
# 画圆形
t.penup()
t.goto(50,-100)
t.pendown()
t.fillcolor('yellow')
t.begin_fill()
t.circle(radius=50)
t.end_fill()
turtle.done()
3. 画三角形及内接步正六边形
题目描述
解题思路
(1) 为了简化绘画步骤,内接正六边形先用circle内接正六边形画,正六边形从圆心切割,是正三角形,因此半径=边长150
(2) 移动圆心位置到需要的位置goto(150,0)
(3) 画内接正六边形用t.circle(radius=150,steps=6)填充颜色fillcolor(‘green’)
(4) 循环画6个外部三角形,这个需要提前在草稿本上绘制路径
(5) 隐藏画笔hideturtle()
(6) 填充开始用begin_fill(),结束填充用end_fill()
import turtle
t=turtle.Turtle()
t.hideturtle()
# 画正六边形
t.penup()
t.goto(150,0)
t.seth(90)
t.pendown()
t.fillcolor('red')
t.begin_fill()
t.circle(radius=150,steps=6)
t.end_fill()
# 画外部三角形
t.seth(0)
t.pencolor('white')
t.fillcolor('green')
for i in range(6):
t.begin_fill()
t.seth(60*(i+1))
t.forward(150)
t.left(120)
t.forward(150)
t.end_fill()
turtle.done()
4. 画扇子
题目描述
解题思路
(1)先计算起始角度,为(180-120)/2=30°,结束为30+120=150,每一度一次循环,可以用for也可以while True
(2)每一次画的时候,先抬笔退30就到了扇子底部,再一次画150+30就把一根线完整画出,再退150回到原点
(3)循环150次画出扇子
(4)充分利用forward(30)正向前进,而forward(-30)只是回退不改变方向的特点。
import turtle
t=turtle.Turtle()
# t.speed(speed=0)
t.hideturtle()
# 起始角度为30,每一度画一次起始(180-120)/2=30,结束30+120=150
ang1=30
while ang1<=150:
t.penup()
t.seth(ang1)
# 回退到扇子底部,走30
t.forward(-30)
t.pendown()
# 走到扇子底部,走150+30
t.forward(180)
# 抬笔回退150,回到原点
t.penup()
t.forward(-150)
ang1+=1
5. 画彩色风扇
题目描述
解题思路
(1)用列表存储四种颜色,这样每次循环用下标刚好取到需要的填充颜色
(2)先把第一次画出来,再按照每次累加360/4=90进行循环
(3)第一次设置初始角度-45°,移动100,再左转90度,准备画扇形,这些需要反复练习
(4) t.circle(radius=100, extent=45)画45度的扇形,画完以后goto(0,0)进行封闭,第一个扇形画完了
(5)利用for i in range(4)循环四次,每次就是第一次的初始角度45+360/4*i就可以重复画出另外四个扇形了
import turtle
t = turtle.Turtle()
# t.speed(speed=0)
t.hideturtle()
listc = ['red', 'yellow', 'blue', 'green']
for i in range(4):
# 依次从列表中获取颜色
t.fillcolor(listc[i])
t.begin_fill()
# 设置初始角度为45°,后面每次累加360/4
t.seth(-45+360/4*i)
# 直行100
t.forward(100)
# 左转90度,以便画扇形,这个是试出来的
t.left(90)
# 画45°的扇形
t.circle(radius=100, extent=45)
# 封口
t.goto(0, 0)
t.end_fill()
turtle.done()