当前位置: 首页 > news >正文

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()

实验结果

相关文章:

  • win10 局域网内聊天
  • 《Python星球日记》 第67天:Transformer 架构与自注意力机制
  • vscode 同一个工作区,不同文件夹之间跳转问题
  • git 怎么更改本地的存储的密码
  • HCIP实验(BGP联邦实验)
  • Linux—进度条实现
  • upload-labs通关笔记-第4关 文件上传之.htacess绕过
  • FFmpeg3.4 libavcodec协议框架增加新的decode协议
  • HarmonyOS 【诗韵悠然】AI古诗词赏析APP开发实战从零到一系列(一、开篇,项目介绍)
  • 物理:由基本粒子组成的个体能否提炼和重组?
  • Realman RM65-B 六自由度超轻量仿人机械臂
  • openjdk底层汇编指令调用(三)——编码
  • CSS可以继承的样式汇总
  • 【fastadmin开发实战】在前端页面中使用bootstraptable以及表格中实现文件上传
  • 使用全局状态管理(Vuex)实现数据共享​
  • “新五强”争锋,基础大模型玩家再洗牌
  • RTSP有两套格式吗?
  • 从数据中台到数据飞轮:实现数据驱动的升级之路
  • 【C++进阶篇】二叉搜索树的实现(赋源码)
  • 量化感知训练与 PyTorch 的哪些事
  • 国台办:实现祖国完全统一是大势所趋、大义所在、民心所向
  • 习近平在中拉论坛第四届部长级会议开幕式的主旨讲话(全文)
  • 云南威信麟凤镇通报“有人穿‘警察’字样雨衣参与丧事”:已立案查处
  • 飙升至熔断,巴基斯坦股市两大股指收盘涨逾9%
  • 旭辉控股集团主席林中:债务重组是活下来的前提,自营开发业务收缩至少数核心城市
  • 刘国中:持续加强护士队伍建设,更好保障人民身体健康