Python实验2
实验名称
turtle 库绘制进阶图形
实验内容
1. 绘制嵌套彩色五角星(大小逐层递减)
2. 设计函数绘制自定义正多边形(边数与颜色参数化)
3. 扩展:实现动态旋转花瓣图案。
代码实现
import turtle
import math
import time
import random# 设置画布
screen = turtle.Screen()
screen.title("图形绘制实验")
screen.bgcolor("white")
screen.setup(width=800, height=800)# 创建画笔
pen = turtle.Turtle()
pen.speed(0)
pen.width(2)def draw_star(size, color):"""绘制五角星"""pen.color(color)pen.begin_fill()for _ in range(5):pen.forward(size)pen.right(144)pen.end_fill()def nested_stars(layers=5, initial_size=200):"""绘制嵌套彩色五角星"""colors = ["red", "orange", "yellow", "green", "blue", "purple"]pen.penup()pen.goto(0, -initial_size / 2)pen.setheading(0)pen.pendown()for i in range(layers):size = initial_size * (1 - i / layers)color = colors[i % len(colors)]draw_star(size, color)# 移动到下一个五角星的起始位置pen.penup()pen.forward(size * 0.1)pen.right(18)pen.pendown()def regular_polygon(sides=5, size=100, color="blue"):"""绘制自定义正多边形"""pen.penup()pen.goto(0, -size / 2)pen.setheading(0)pen.pendown()angle = 360 / sidespen.color(color)pen.begin_fill()for _ in range(sides):pen.forward(size)pen.right(angle)pen.end_fill()def rotating_petals(petals=12, size=150, speed=5):"""绘制动态旋转花瓣图案"""colors = ["red", "orange", "yellow", "green", "blue", "purple", "pink", "cyan"]while True:pen.clear()for i in range(petals):# 计算当前角度和颜色angle = (360 / petals) * i + (time.time() * speed) % 360color = colors[i % len(colors)]# 移动到花瓣位置pen.penup()x = size * 0.7 * math.cos(math.radians(angle))y = size * 0.7 * math.sin(math.radians(angle))pen.goto(x, y)# 绘制花瓣(使用三角形模拟)pen.setheading(angle + 90)pen.color(color)pen.begin_fill()pen.forward(size)pen.right(120)pen.forward(size)pen.right(120)pen.forward(size)pen.end_fill()screen.update()time.sleep(0.05)def main():"""主菜单"""print("图形绘制实验")print("1. 嵌套彩色五角星")print("2. 自定义正多边形")print("3. 动态旋转花瓣图案")print("0. 退出")while True:choice = input("请选择功能(0-3): ")if choice == '0':print("程序已退出")screen.bye()breakelif choice == '1':pen.reset()layers = int(input("输入嵌套层数(1-10): ") or 5)size = int(input("输入初始大小(50-300): ") or 200)nested_stars(layers, size)elif choice == '2':pen.reset()sides = int(input("输入边数(3-12): ") or 5)size = int(input("输入大小(50-300): ") or 100)color = input("输入颜色(如red, blue, #FF00FF): ") or "blue"regular_polygon(sides, size, color)elif choice == '3':pen.reset()pen.hideturtle()screen.tracer(0) # 关闭自动刷新petals = int(input("输入花瓣数(4-24): ") or 12)size = int(input("输入花瓣大小(50-200): ") or 150)speed = int(input("输入旋转速度(1-10): ") or 5)rotating_petals(petals, size, speed)screen.tracer(1) # 恢复自动刷新pen.showturtle()else:print("无效输入,请重新选择")if __name__ == "__main__":main()