Python Turtle繪圖:橫切的橙子(基礎效果/畫海綿層優化)【難度2星】

```
# 案例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。

速度值從 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ú\],是橘、柑、橙、金柑,柚、枳等的總稱。
柑橘上面的白色經絡叫橘絡,也叫橘絲、橘筋。(也就是橘子檸檬橙子等水果皮里那層白色的東西都叫橘絡。檸檬也屬柑橘類。)
而靠近外果皮的白色部分是海綿層。

?【效果預覽】
了解了相關的生物知識后,我們知道橙子中的白色部分由海綿層和橘絡構成。
海綿層較厚,橘絡較薄。所以在繪圖的時候,就需要分開設置畫筆的粗線。

```
# 案例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常用指令**

- 一、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教案
- 教案