写这个主要是为了辅助和讲解过蓝桥杯的初级测试,难度并不高,重点在于解析过程。
import turtle as t
# 第1步: 设置绘制次数以及每次旋转角度,题目要求隐藏画笔
times = 12
angle = 360 / times
t.hideturtle()
# 第2步: 设置画笔颜色为红,画半径120圆,先移动120距离方便画圆
t.pencolor("red")
t.penup()
t.goto(0, -120)
t.pendown()
t.circle(120)
# 第3步: 回到圆心,按照n做循环,设置线条颜色为黑色,填充颜色为黄色
t.penup()
t.home()
t.color("black", "yellow")
# 第4步: 拆分画菱形的步骤进行循环
for i in range(times):
# 次增加1个分割角度angle
t.seth(angle * i)
t.penup()
t.forward(120)
t.pendown()
# 绘制菱形,左转30,走80,右转60,走80,再右转120,走80,再右转60,走80,回到起点
# 以上可以在0°时,用笔试画一下
t.begin_fill()
t.left(30)
t.forward(80)
t.right(60)
t.forward(80)
t.right(120)
t.forward(80)
t.right(60)
t.forward(80)
t.end_fill()
# 回原点
t.penup()
t.home()
#结束绘图
t.done
import turtle as t
# 定义初始边长和角度
leng = 60
angle = 60
# 初始化角度向上
t.seth(90)
# 定义一个子函数,从输入的数组[[X,Y,heading]]提取多个点坐标和方向用于画二叉树
# 同时把二叉树的两个树杈点和方向存到数组里
def draw_ercha(l1, list_posx=[[]]):
# 如果输入点数组为空,则结束函数返回空数组
if len(list_posx) == 0:
return list_posx
list_posx2 = []
for ls in list_posx:
x = ls[0]
y = ls[1]
ang = ls[2]
t.setx(x)
t.sety(y)
t.seth(ang)
t.pendown()
t.left(angle / 2)
t.forward(l1)
# 存储左上角点坐标和方向
pos1 = [t.xcor(), t.ycor(), t.heading()]
t.penup()
t.forward(l1 * -1)
t.pendown()
t.right(angle)
t.forward(l1)
# 存储右上角点坐标和方向
pos2 = [t.xcor(), t.ycor(), t.heading()]
t.penup()
# 回到起始点
t.forward(l1 * -1)
t.left(angle / 2)
list_posx2.append(pos1)
list_posx2.append(pos2)
return list_posx2
# 用一个点数组记录每次画叉的起点
# 第一次起点为0,0且只有1个点,分叉次数为4
times = 4
run = 1
list_pos = [[0, 0, 90]]
# 画第一个二叉树,返回数顶部的两个点位置和方向
list_pos = draw_ercha(leng, list_pos)
while len(list_pos) > 0 and run < times:
# 每层分支长度减6
leng -= 6
list_pos = draw_ercha(leng, list_pos)
run += 1