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)
- 一、Python新手篇
- 第1章 环境配置
- 1.1 顺序结构流程图
- 1.2 分支结构流程图
- 1.3循环结构流程图
- 第2章-小海龟画图
- 2.1 认识会作图的小海龟
- 2.2小海龟的作图绝学
- 2.2.1小海龟画线段
- 2.2.2小海龟画正方形
- 2.2.3小海龟画长方形
- 2.2.4小海龟画小星星
- 2.2.5添加背景色
- 2.2.6给小星星涂色
- 2.3小海龟小结
- 2.4小海龟作图实践
- 2.5绘图练习
- 2.5.1绘制三角形
- 2.5.2绘制倒三角+正三角
- 2.5.3绘制正方形
- 2.5.4绘制四条线
- 2.5.5 画五角星
- 2.5.6 画五个同心圆
- 2.5.7 画一个回型
- 2.5.8 绘制复杂图形
- 2.5.9 绘制太阳花
- 2.5.10 绘制4个不同半径的同切圆
- 2.5.11 六角形的绘制
- 2.5.12 绘制一个风轮
- 2.5.13绘制文本
- 2.5.14 绘制菱形
- 2.5.15 绘制正五边形
- 2.5.16 绘制一个四瓣花图形
- 2.5.17 绘制一个四叶草
- 2.5.18 绘制一个星星
- 2.5.19 绘制一条绿色蟒蛇
- 2.5.20 绘制一朵小红花
- 2.5.21 文字顺时针呈圆形排列
- 2.5.22 多变螺旋线
- 2.5.23 顺序结构绘制图形
- 2.5.24横切开的橙子
- 2.5.25绘制扇子
- 2.5.26绘制棒棒糖
- 2.5.27绘制螺旋彩色文字
- 2.5.28写春联
- 2.5.29绘制奥运五环
- 2.5.30红灯笼
- 2.5.31写古诗
- 2.5.32写福字
- 2.5.33冰墩墩
- 2.5.34玫瑰花
- 2.5.35丘比特爱心之箭
- 2.5.36樱花树
- 2.5.37绘制旋转风车
- 第3章这是变量
- 3.1神奇的变量
- 3.2数字的奥秘
- 3.2.1数字运算符
- 3.2.2.运算的顺序
- 3.2.3给数字取个洋气的英文名
- 3.3字符串是什么东西
- 3.4变量的可变性
- 3.5变量取名字很讲究
- 3.6变量学习小结
- 3.7趣味小挑战
- 第4章 是或不是的前因后果
- 4.1 什么叫条件判断
- 4.1.1猜数字
- 4.1.2坐火车
- 4.2 看if来断案
- 4.3 真假总该做点事
- 4.4 if不做的,else来做
- 4.5 它们还有一个兄弟elif
- 4.6 满足两个条件找and
- 4.7 满足一个条件用or
- 4.8 逻辑运算符not
- 4.9 小结条件逻辑
- 4.10 条件逻辑大考验
- 第5章 循环是一种神奇的力量
- 5.1 循环内功修炼,掌握for循环
- 5.2 循环招式升级while
- 5.3 可怕的无限循环
- 5.4 break和continue
- 5.5 温故而知新
- 5.6 循环大测试
- 5.7 循环
- 5.7.1导学
- 5.7.2教学设计
- 5.7.3 课件
- 第6章 3兄弟:“列表” “元组” “字典”
- 6.1 重新认识列表
- 6.2 往列表里添加新元素
- 6.3 确定列表中元素的位置
- 6.4 获取列表中连续的元素
- 6.5 换掉列表中的元素
- 6.6 查询列表中是否存在该元素
- 6.7 找到列表元素的索引
- 6.8 遍历列表中的所有元素
- 6.9 给列表元素排序
- 6.10 元组是只读的
- 6.11 字典讲究对应
- 6.11.1 往字典中添加新元素
- 6.11.2 从字典中获取元素
- 6.11.3 修改字典中元素的值
- 6.11.4 删除字典中的元素
- 6.11.5 遍历字典中的元素
- 6.12 课后小结
- 6.13 迎接小挑战
- 第7章 拥有强大能量的函数
- 7.1 创造自己的函数
- 7.2 让函数动起来
- 7.3 有参数的函数
- 7.4 有多个参数的函数
- 7.5 参数数量不确定
- 7.6 有返回值的函数
- 7.7 变量的作用域
- 7.7.1 局部变量
- 7.7.2 全局变量
- 7.7.3 强制为全局变量
- 7.8 函数能量回收
- 7.9 函数能量小挑战
- 第8章 深奥的类与对象
- 8.1 我们熟悉的类与对象
- 8.2 Python中的类和对象
- 8.3 创建实例对象
- 8.4 对象都有自己独特的属性
- 8.5 对象还可以有自己的动作
- 8.6 类的三大特性
- 8.7 类与对象总结
- 8.8 类与对象小挑战
- 第9章 注释帮助我们理解
- 9.1 如何创建注释
- 9.1.1 单行注释
- 9.1.2 多行注释
- 9.2 添加注释的"要”与“不要”
- 9.3 注释回顾
- 9.4 添加注释
- 第10章 警报,警报,发现异常
- 10.1 Python的守卫者
- 10.2 调试
- 10.3 异常与调试小结
- 10.4 异常与调试挑战
- 第11章 强大的模块功能库
- 11.1 什么是模块
- 11.2 创建属于自己的模块
- 11.3 使用模块带来的便利
- 11.4 命名空间
- 11.5 局部命名空间
- 11.6 全局命名空间
- 11.7 内置命名空间
- 11.8 Python内置标准模块
- 11.9 模块学习总结
- 11.10 模块学习大挑战
- 第12章 玩转图形界面编程
- 12.1 什么是GUI编程
- 12.2 Python中的GUI编程
- 12.3 第一个GUI程序----根窗口
- 12.4 Label组件
- 12.5 Button组件
- 12.6 Entry组件
- 12.7 Canvas组件
- 12.8 布局管理方式
- 12.9 tkinter小总结
- 12.10 tkinter小挑战
- 第13章 操控文件的读与写
- 13.1 什么是文件
- 13.2 打开文件
- 13.3 写文件
- 13.4 读文件
- 13.5 游戏时间
- 13.6 文件小总结
- 13.7 文件小挑战
- 第14章 网络爬虫不是小虫子
- 14.1 网络连接
- 14.2 了解网络爬虫
- 14.3 用Python发起网络请求
- 14.4 HTML
- 14.4.1 HTML的常用标签
- 14.4.2 标签的样式
- 14.5 解析网站内容
- 14.6 第一个爬虫程序
- 14.7 爬虫小总结
- 14.8 爬虫小挑战
- 第15章 攻克星球大战
- 15.1 pygame的安装
- 15.2 分析一下我们的飞机大战
- 15.3 定义运行窗口
- 15.4 用键盘控制飞机移动
- 15.5 飞机发射子弹
- 15.6 敌机的创建
- 15.7 子弹击中敌机----精灵的碰撞检测
- 15.8 记录得分
- 15.9 游戏结束
- 15.10 pygame小结
- 15.11 pygame课后小挑战
- 三、Python基础篇
- 4.列表、元组、字典和集合
- 4.1.什么是序列,Python序列详解
- 4.2.Python列表(list)
- 4.3Python list列表添加元素
- 4.4Python list列表删除元素
- 4.5Python list列表修改元素
- 4.6Python list列表查找元素
- 5
- 6
- 7.函数和lambda表达式
- 7.1Python函数
- 7.2Python函数值传递和引用传递(包括形式参数和实际参数的区别)
- 7.3Python函数参数传递机制(超级详细)
- 7.4什么是位置参数,Python位置参数
- 7.5Python函数关键字参数及用法
- 7.6Python函数默认参数设置(超级详细)
- 7.7Python函数可变参数(*args,**kwargs)详解
- 7.8Python逆向参数收集详解(进阶必读)
- 7.9Python None(空值)及用法
- 7.10Python return函数返回值详解
- 7.11Python函数返回多个值的方法(入门必读)
- 7.12Python partial偏函数及用法
- 7.13Python函数递归
- 7.14Python变量作用域(全局变量和局部变量)
- 8.Python类和对象
- 8.1什么是面向对象,Python面向对象(一切皆对象)
- 8.2Python class:定义类(入门必读)
- Python考级
- Python一级
- Python一级202206
- Python一级202203
- Python一级202112
- Python一级202109
- Python一级202106
- Python一级202103
- Python一级202012
- Python一级202009
- Python一级202006
- Python二级
- Python二级202206
- Python二级202203
- Python二级202112
- Python二级202109
- Python三级
- 1.202109Python三级
- Python四级
- 1.202109Python四级
- Python练习题
- 参考
- 1.绘制三角形
- 2.绘制倒三角+正三角
- 3.绘制正方形
- 4.绘制四条线段
- 5.画五角星
- 6.画五个同心圆
- 7.画一个回型
- 8.绘制如下图形
- 9.绘制太阳花
- 10.绘制4个不同半径的同切圆
- 11.六角形的绘制
- 12.绘制一个风轮
- 13 绘制文本
- 14 绘制菱形
- 15.绘制正五边形
- 16 绘制一个四瓣花图形
- 17 绘制一个四叶草
- 18 绘制一个星星
- 19 绘制一条绿色蟒蛇
- 20 绘制一朵小红花
- 21 文字顺时针呈圆形排列
- 22 多变螺旋线
- 23 顺序结构绘制图形
- 24横切开的橙子
- 25绘制扇子
- 26绘制棒棒糖
- 27.彩色螺旋文字
- 28写春联
- 29绘制奥运五环
- 30红灯笼
- 31写古诗
- 32写福字
- 33冰墩墩
- 34玫瑰花
- 35丘比特爱心之箭
- 36随机樱花树
- 37旋转风车
- 分数等级
- 自由落体运动
- 根据年月日计算天数
- 1.常见数学问题
- Python库学习
- 1.turtle库
- 2.sprites库
- 参考资料
- Python编程入门与算法进阶
- Python编程一级
- 第1课编程环境
- 第2课编程基础
- 第3课运算符
- 第4课Turtle库
- Python编程二级
- 第5课基本数据类型
- 第6课可变序列-列表
- 第7课不可变序列-元祖
- 第8课字符串
- 第9课字典
- 第10课流程控制
- 第11课计算思维
- Python编程三级
- 第12课编码与数制
- 第13课数据处理
- 第14课异常处理
- 第15课算法
- 第16课核心函数
- Python编程四级
- 第17课函数的相关概念
- 第18课自定义函数的创建与调用
- 第19课递归与递推
- 第20课分治算法
- 第21课算法优化
- 第22课第三方库(模块)的获取、安装与调用
- Python编程五级
- Python编程六级
- 常用案例
- 高一信息技术试讲
- 2.3教案
- 教案