ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Python Turtle绘图:横切的橙子(基础效果/画海绵层优化)【难度2星】 ![](http://h.yiniuedu.com/e5dec47774d3e1e68a47cd853e9436f1) ``` # 案例1:横切的橙子(基础效果) # 程序初始化设置 import turtle # 导入turtle库 turtle.bgcolor("black") # 设置背景颜色为黑色black turtle.speed(0) # 设置海龟的绘图速度。参数为0时绘图速度最快;为1时最慢;可输入不大于10的数字观察速度变化。大于10无效。 # 但如果想要看清画图的细节,speed(1)的速度还是过快,这时就要使用delay()函数来帮助进一步减速。 #turtle.delay(20)               # 设置海龟绘图的延迟时间。参数为0时绘图速度最快。大于0时,数字越大,延迟时间越长,则绘图速度越慢。 # 如:speed(1)  delay(20) 搭配组合,绘图速度会非常慢,可看清绘图细节。 # 变量初始化赋值 d1=400 # 变量d1 表示橙子的直径 hou=40 # 变量hou 表示橙子果皮的厚度 num=11 # 变量num 表示橙子果肉的瓣数 size=10 # 变量size 是画橙子囊瓣时画笔的粗细。 d2=d1-hou # 变量d2 是橙子剥皮后的直径 r2=d2/2 # 变量r2 是橙子剥皮后的半径,即扇形囊瓣的边长。 # ①画橙子果皮 turtle.dot (d1,"#ff6600")        # 画直径为d1 颜色为#ff6600 的圆点 # ②画橙子果肉 turtle.pensize(size) # 设置画橙子囊瓣时画笔的粗细 turtle.pencolor("white") # 重新设置画笔的颜色为白色white。画橙子里面的白色部分。 turtle.fillcolor("#ff9900")      # 设置填充颜色为#ff9900,即果肉的颜色为#ff9900。 for i in range(num): # 循环num次。程序初始化时,设置为几瓣就循环几次。 # 画出橙子果肉的一瓣 turtle.begin_fill()          # 开始填充颜色 turtle.backward(r2)          # 海龟后退r2步 turtle.right(90) # 海龟向右转向90度,即圆弧切线的方向。 turtle.circle (r2,360/num) # 画一条半径为r2像素,角度为360/num度的弧线。 turtle.left(90)              # 海龟向左转向90度 turtle.forward(r2) # 海龟向前移动r2步 turtle.end_fill()            # 结束填充颜色 # 画图结束,隐藏海龟 turtle.hideturtle() turtle.done() ``` *****  【重难点突破】 海龟绘图的时候,我们一般使用speed( )函数来控制海龟的绘图速度,但是最快的speed(0)或最慢的speed(1)还是满足不了我们的需要,该怎么办? **可以再结合使用delay( )函数 。** 将speed( )和delay( )两个函数搭配使用,可以让海龟绘图速度变得更快或更慢。 如:以下设置会使海龟绘图速度变得非常快 turtle.speed(0) turtle.delay(0) 以下设置又会使得海龟绘图速度变得非常慢 turtle.speed(1) 参数范围是0到10的整数 turtle.delay(50)  参数还可以更大,会更慢 **1. speed( )函数的使用方法** **语法:turtle.speed(speed=None)** **作用:设置海龟移动的速度或返回当前海龟的速度。** **参数:** speed – 一个0到10范围内的整型数或速度字符串。如speed(“fastest”)等价于speed(0)。 无参:返回当前海龟的速度 **参数对应表:** 如果输入数值大于 10 或小于 0.5 则速度设为 0。 ![](http://h.yiniuedu.com/4006f48ac13d2321e07ec4513eb0bc1a) 速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。speed = 0 表示没有动画效果(转向),但绘制还是需要时间,最快。 ****2. delay( )函数的使用方法**** **语法:turtle.delay(delay=None)** **作用:** 设置或返回以毫秒数表示的延迟值delay。(这约等于连续两次画布刷新的间隔时间。)绘图延迟越长,动画速度越慢。 **参数:** delay –正整型数 无参:返回以毫秒数表示的延迟值 delay **3. speed()和delay( ) 的区别** 通俗点讲,**speed( )** 就是海龟抬起一只脚开始跨步到落脚之间的这段距离,海龟所用时间的长短,即跨步(绘图)速度。 同一段距离,所用的时间越短,海龟跨步(绘图)速度越快;所用的时间越长,跨步(绘图)速度越慢。 **delay( )** 就是海龟一只脚抬起跨步落脚后到抬起另一只脚之间的间隔时间(延迟时间)。 当参数为0时,表示没有间隔时间(延迟时间)。也就是一只脚抬起跨步落脚后就瞬间抬起另一只脚,绘图速度自然更快。 当参数大于0时,数值越大,间隔时间(延迟时间)越长。也就是一只脚抬起跨步落脚后需要等待一段时间后才抬起另一只脚,等待的时间越长,则绘图速度越慢。 **【善用“调试”功能】** 若想看清楚海龟绘图细节,除了同时设置speed( )和delay( )让海龟绘图速度慢下来,还可以使用调试功能调试。 继续点“步进”,代码就会一条一条执行。这样我们就能更方便地分析理解每句代码的功能。 “调试”功能非常实用也强大,但往往被初学者忽视。若没有好的学习方法,Python学习会变得更艰难,所以我们要大胆去尝试,善于使用Python编辑器的调试功能。 ***** **案例2:** **横切的橙子(画海绵层优化)** **难度:** ★★☆☆☆☆   【发现问题】 如果我们仔细观察橙子实物或图片,会发现橙子中白色部分的厚度,分布并不均匀。 并不是案例1绘图中呈现的那种效果。 靠近黄色果皮的白色部分比较厚,橙子瓣中间的白色部分又比较薄。  【链接生物】 橙子属于柑橘类。 柑橘\[gān jú\],是橘、柑、橙、金柑,柚、枳等的总称。 柑橘上面的白色经络叫橘络,也叫橘丝、橘筋。(也就是橘子柠檬橙子等水果皮里那层白色的东西都叫橘络。柠檬也属柑橘类。) 而靠近外果皮的白色部分是海绵层。 ![](http://h.yiniuedu.com/d3de1fed582a6955688d5c629ad69373)  【效果预览】 了解了相关的生物知识后,我们知道橙子中的白色部分由海绵层和橘络构成。 海绵层较厚,橘络较薄。所以在绘图的时候,就需要分开设置画笔的粗线。 ![](http://h.yiniuedu.com/2f082570622f0527f9540a422345a085) ``` # 案例2:横切的橙子(画海绵层优化) # 程序初始化设置 import turtle # 导入turtle库 turtle.bgcolor("black") # 设置背景颜色为黑色black turtle.speed(0) # 设置海龟的绘图速度。参数为0时绘图速度最快;为1时最慢;大于10无效。 # 但如果想要看清画图的细节,speed(1)的速度还是过快,这时就要使用delay()函数来帮助进一步减速。 #turtle.delay(20)       # 设置海龟绘图的延迟时间。参数为0时绘图速度最快。大于0时,数字越大,延迟时间越长,则绘图速度越慢。 # 如:speed(1)  delay(20) 搭配组合,绘图速度会非常慢,可看清绘图细节。 # 变量初始化赋值 d1=400 # 变量d1 表示橙子的直径 hou=20 # 变量hou 表示橙子外果皮的厚度 d2=d1-hou # 变量d2 是橙子剥去外果皮后橙子的直径,即果肉加海绵层(中果皮)的厚度。 d3=d1-hou-hou-hou/2 # 变量d3 是橙子剥去外果皮和海绵层后的直径,即果肉的厚度。 r3=d3/2 # 变量r3 是橙子剥去外果皮和海绵层后的半径径,即扇形囊瓣的边长。 num=11 # 变量num 表示橙子果肉的瓣数 size=5 # 变量size 是画橙子囊瓣时画笔的粗细。表示白色橘络的厚度,白色橘络比白色海绵层要薄很多。 # ①画橙子外果皮 turtle.dot (d1,"#ff6600")        # 画直径为d1 颜色为#ff6600 的圆点 # ②画中果皮海绵层 turtle.dot(d2,"white") # 画直径为d2 颜色为白色white 的圆点 # ③画橙子果肉 turtle.pensize(size) # 设置画橙子囊瓣时画笔的粗细。变量size表示白色橘络的厚度。 turtle.pencolor("#ffffff") # 重新设置画笔的颜色为#ffffff白色。画白色橘络。 turtle.fillcolor("#ff9900")      # 设置填充颜色为#ff9900。即果肉的颜色为 #ff9900。 for i in range(num): # 循环num次。程序初始化时,设置为几瓣就循环几次。 # 画出橙子果肉的一瓣 turtle.begin_fill()          # 开始填充颜色 turtle.backward(r3)          # 海龟后退r3步 turtle.right(90) # 海龟向右转向90度。即圆弧切线的方向。 turtle.circle (r3,360/num) # 画一条半径为r3,角度为360/num度的弧线。 turtle.left(90)              # 海龟向左转向90度 turtle.forward(r3) # 海龟向前移动r3步 turtle.end_fill()            # 结束填充颜色 # 画图结束,隐藏海龟 turtle.hideturtle() turtle.done() ``` **turtle常用指令** ![](http://h.yiniuedu.com/b534b8cef0e4206326e66558548b3031)