python海龜繪圖圓形_python之海龜繪圖

1. 基本功能介紹

在海龜作圖中,我們可以編寫指令讓一個虛擬的(想象中的)海龜在屏幕上來回移動。這個海龜帶著一只鋼筆,我們可以讓海龜無論移動到哪都使用這只鋼筆來繪制線條。通過編寫代碼,以各種很酷的模式移動海龜,我們可以繪制出令人驚奇的圖片。使用海龜作圖,我們不僅能夠只用幾行代碼就創建出令人印象深刻的視覺效果,而且還可以跟隨海龜看看每行代碼如何影響到它的移動。這能夠幫助我們理解代碼的邏輯。所以海龜作圖也常被用作新手學習 Python 的一種方式。

1.1 Turtle motion (運動控制)

本節中包含了 運動控制 中常用的一些函數

turtle.goto(x,y)

畫筆定位到坐標(x,y)

turtle.forward(distance)

向正方向運動 distance 長的距離

turtle.backward(distance)

向負方向運動 distance 長的距離

turtle.right(angle)

向右偏 angle 度

turtle.left(angle)

向左偏 angle 度

turtle.home()

回到原點

turtle.circle(radius, extent=None, steps=None)

畫圓形 radius 為半徑,extent 為圓的角度

turtle.speed(speed)

以 speed 速度運動

看到這么多函數肯定已經頭大了,我們以例題來講解。

首先畫一個邊長為100的正方形,然后再以半徑為50畫出其3/4圓。

#控制畫筆的速度

turtle.speed(5)#將畫筆定位到原點

turtle.goto(0,0)#從原點開始,畫出一個邊長為100的正方形

for i in range(4):#正向運動 100 的距離

turtle.forward(100)#向右偏 90 度

turtle.right(90)#將畫筆定位到原點

turtle.home()#畫出一個半徑為100,占3/4的圓

turtle.circle(50,270)

結果:

webp

1.2 Pen control (畫筆控制)

本節包含了對畫筆的控制函數,常用的如下:

turtle.pendown()

落筆,在此狀態下會畫出運動的軌跡

turtle.pendown()

起筆,在此狀態下不會畫出運動的軌跡

turtle.pensize(width=None)

畫筆粗細

turtle.pencolor(*args)

畫筆顏色

turtle.fillcolor(*args)

填充顏色

turtle.begin_fill()

開始填充

turtle.end_fill()

結束填充

turtle.write(arg, move=False, align=”left”, font=(“Arial”, 8, “normal”))

寫文字

同樣,我們以一個例題來講解。

畫一個正方形并填充,最后寫一些文字

#控制畫筆顏色

turtle.pencolor('red')#落筆

turtle.pendown()#設置填充顏色

turtle.fillcolor('blue')#開始填充

turtle.begin_fill()#從原點開始,畫出一個邊長為100的正方形

for i in range(4):#正向運動 100 的距離

turtle.forward(200)#向右偏 90 度

turtle.right(90)#結束填充

turtle.end_fill()

turtle.penup()

turtle.goto(100,-100)

turtle.write('Crossin編程教室')

最后的結果是這樣

70

同時,我們還可以設置畫筆打粗細、畫筆的速度等屬性,

1.3 Window control (視窗控制)

這里有兩個常用的函數

turtle.bgcolor(*args)

設置背景顏色

turtle.bgpic(picname=None)

背景圖片填充

設置代碼如下

turtle.bgcolor('red')

turtle.bgpic(r'yourpic.png')

2. 海龜繪圖實例

我們用幾個簡單的例子講解海龜繪圖的用法。

2.1 用正方形畫圓

importturtlefor i in range(360):

turtle.setheading(i)for i in range(4):

turtle.forward(100)

turtle.left(90)

360 個正方形每隔 1 度排列,短短幾行代碼可以生成一個漂亮規則的圖形。

70

2.2 紅色的五角星

使用填充功能畫出一個大紅星

importturtle

turtle.color('red','red')

turtle.begin_fill()for i in range(5):

turtle.forward(100)

turtle.right(144)

turtle.end_fill()

結果如圖:

70

動態時鐘

#coding=utf-8

importturtlefrom datetime import *

#抬起畫筆,向前運動一段距離放下

defSkip(step):

turtle.penup()

turtle.forward(step)

turtle.pendown()defmkHand(name, length):#注冊Turtle形狀,建立表針Turtle

turtle.reset()

Skip(-length * 0.1)#開始記錄多邊形的頂點。當前的烏龜位置是多邊形的第一個頂點。

turtle.begin_poly()

turtle.forward(length* 1.1)#停止記錄多邊形的頂點。當前的烏龜位置是多邊形的最后一個頂點。將與第一個頂點相連。

turtle.end_poly()#返回最后記錄的多邊形。

handForm =turtle.get_poly()

turtle.register_shape(name, handForm)defInit():globalsecHand, minHand, hurHand, printer#重置Turtle指向北

turtle.mode("logo")#建立三個表針Turtle并初始化

mkHand("secHand", 135)

mkHand("minHand", 125)

mkHand("hurHand", 90)

secHand=turtle.Turtle()

secHand.shape("secHand")

minHand=turtle.Turtle()

minHand.shape("minHand")

hurHand=turtle.Turtle()

hurHand.shape("hurHand")for hand insecHand, minHand, hurHand:

hand.shapesize(1, 1, 3)

hand.speed(0)#建立輸出文字Turtle

printer =turtle.Turtle()#隱藏畫筆的turtle形狀

printer.hideturtle()

printer.penup()defSetupClock(radius):#建立表的外框

turtle.reset()

turtle.pensize(7)for i in range(60):

Skip(radius)if i % 5 ==0:

turtle.forward(20)

Skip(-radius - 20)

Skip(radius+ 20)if i ==0:

turtle.write(int(12), align="center", font=("Courier", 14, "bold"))elif i == 30:

Skip(25)

turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

Skip(-25)elif (i == 25 or i == 35):

Skip(20)

turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

Skip(-20)else:

turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))

Skip(-radius - 20)else:

turtle.dot(5)

Skip(-radius)

turtle.right(6)defWeek(t):

week= ["星期一", "星期二", "星期三","星期四", "星期五", "星期六", "星期日"]returnweek[t.weekday()]defDate(t):

y=t.year

m=t.month

d=t.dayreturn "%s %d%d" %(y, m, d)defTick():#繪制表針的動態顯示

t =datetime.today()

second= t.second + t.microsecond * 0.000001minute= t.minute + second / 60.0hour= t.hour + minute / 60.0secHand.setheading(6 *second)

minHand.setheading(6 *minute)

hurHand.setheading(30 *hour)

turtle.tracer(False)

printer.forward(65)

printer.write(Week(t), align="center",

font=("Courier", 14, "bold"))

printer.back(130)

printer.write(Date(t), align="center",

font=("Courier", 14, "bold"))

printer.home()

turtle.tracer(True)#100ms后繼續調用tick

turtle.ontimer(Tick, 100)defmain():#打開/關閉龜動畫,并為更新圖紙設置延遲。

turtle.tracer(False)

Init()

SetupClock(160)

turtle.tracer(True)

Tick()

turtle.mainloop()if __name__ == "__main__":

main()

結果是一個動態的時鐘,下圖只是一個截圖

1785229-20191025151842120-989269304.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538665.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538665.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538665.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PLSQL Developer導入csv文件到oracle

csv文件內容: 要導入的表結構 create table RPT_MONILUCE_2_P01 ( imsi NUMBER, road_line NUMBER, ci NUMBER, diff NUMBER, rn NUMBER, sdate DATE, report_id NUMBER(20) ) 步驟: 1、在csv第一行上增加…

erwin 不能輸入中文_國產開源建模軟件PDMan與國外商業建模軟件ERwin的主要功能比較...

在數據庫建模的過程中,我們經常會使用到ERwin或者Power Designer之類的建模軟件,來構建我們的邏輯模型和物理模型。但是這類軟件都屬于商業軟件,需要企業購買相應的許可證授權。有些時候,我們會在沒有購買這類商業建模軟件的環境下…

Confluence 6 workbox 通知包含了什么

當一個用戶在 Confluence 中進行下面的操作的時候,workbox 將會顯示為通知: 分享(Shares) 你的頁面或者博客頁面。 提及(Mentions) 你的頁面,博客頁面,回復或者任務。你 關注&#x…

已知一點經緯度,方位角,距離,求另一點經緯度

參考了博文:http://blog.csdn.net/pyx6119822/article/details/52298037 ------------------------------------------------ package hellotest;public class LonLatTest3 {/** 大地坐標系資料WGS-84 長半徑a6378137 短半徑b6356752.3142 扁率f1/298.2572236*//**…

計算機一級excel如何選擇2個,2017年計算機一級excel操作題(2)

(3)建立和編輯圖表選擇工作簿中需要編輯的表單,為其添加圖表,其具體操作如下:步驟1選取“電腦城日出貨統計表”的“配件”和“所占比例”兩列,選擇【插入一圖表】命令,在彈出的“圖表向導”對話框“標準類型”的“圖表…

python的基本語術_一起學python-徹底掌握專業術語“變量”的概念

昨天分享了笨方法學習編程,今天就讓我們通過實戰來接觸python,掌握專業術語“變量”的概念吧 python 中的變量的基本概念和初中代數的方程式X的概念是一樣的,只是在計算機程序當中這個X不僅僅可以代表一個數字,還可以代表一段文字…

lamp自動部署工具_Linux一鍵配置工具ezhttp介紹

簡介: ezhttp是一個Linux一鍵配置工具,采用bash腳本語言編寫。支持自動配置LAMP,LNMP,LNAMP環境,以前提供各種其它的配置工具,如自動配置swap,配置iptables等。項目托管在github,地址為https://github.com/centos-bz/e…

Maven錯誤

1、軟件包javax.servlet不存在 解決辦法: 從tomcat lib目錄下拷貝一個servlet-api.jar的包到“JDK\jre\lib\ext”目錄下 凡是出現找不到包的情況,都可以將找到的包放到JDK\jre\lib\ext下,然后再編譯就能夠通過。 有方法是在pom.xml中引用s…

我對計算機感興趣作文300字,我想對電腦游戲說作文300字

電腦游戲呀!電腦游戲呀!我知道你被人們創造出來,是想給人們帶來快樂,可你也給人們帶來了不少煩惱呀!你可知道,自從爸爸迷上了你,就像是變了一個人似的……每天清晨,天還蒙蒙亮&#…

git設置全局賬號密碼_jenkins2.222使用之二、總體設置

構建前提:由于構建的時候是基于maven、git(碼云)以及jdk1.8來的,所以這些都需要和jenkins安裝在同一臺服務器上面。全局工具配置:1、配置jdk系統管理-全局工具配置-jdk,配置如下:jdk版本可以配置多個,構建的時候&#…

Mybatis源碼之(TypeAliasRegistry)TypeAlias別名實現機制

原文鏈接:http://blog.csdn.net/qq924862077/article/details/52612589 ---------------------------------- 在Mybatis編程中我們經常會用到將某個bean作為參數類型parameterType或者結果返回值類型ResultType,所以很多時候我們需要把完成的Bean的包名…

Java中Synchronized的用法

2019獨角獸企業重金招聘Python工程師標準>>> 《編程思想之多線程與多進程(1)——以操作系統的角度述說線程與進程》一文詳細講述了線程、進程的關系及在操作系統中的表現,這是多線程學習必須了解的基礎。本文將接著講一下Java線程同步中的一個重要的概念…

concat特征融合_MSFNet:多重空間融合網絡進行實時語義分割(北航和曠視聯合提出)...

作者:Tom HardyDate:2020-02-01來源:MSFNet:多重空間融合網絡進行實時語義分割(北航和曠視聯合提出)原文鏈接:https://arxiv.org/abs/1911.07217主要內容實時語義分割是一項具有挑戰性的任務,因…

wifi信號手機測試軟件,專業的WiFi檢測工具有哪些?如何解決wifi信號不好?

原標題:專業的WiFi檢測工具有哪些?如何解決wifi信號不好?有朋友wifi測試軟件有哪些?WiFi信號和聲音一樣,強弱都是可以測量的,檢測WiFi的方法有很多,作為普通的家庭用戶,我們有時需要…

python創建數組與列表_python基礎(三):數組和列表

下面是小凰凰的簡介,看下吧! 💗人生態度:珍惜時間,渴望學習,熱愛音樂,把握命運,享受生活 💗學習技能:網絡 -> 云計算運維 -> python全棧( 當前正在學習…

Mybatis之typeAlias配置的3種方法

原文鏈接&#xff1a;http://www.cnblogs.com/lxcmyf/p/6444120.html ------------------------------- 擴展閱讀&#xff1a;http://blog.csdn.net/zengmingen/article/details/70163420 ------------------------------------ 1.定義別名&#xff1a; <typeAliases>…

PHP 開啟或關閉錯誤提示

如果不具備修改 php.ini 的權限&#xff0c;可以如下&#xff1a; // 只需在php文件中加入這兩句即可開啟PHP錯誤提示ini_set("display_errors", "On"); error_reporting(E_ALL | E_STRICT); 如果具備修改 php.ini 權限的話&#xff0c;如下即可&#xff…

python 無頭模式_Python + Selenium(二十五)無頭模式 headless

所謂瀏覽器的無頭模式headless&#xff0c;就是瀏覽器在運行時處于后臺操作的模式&#xff0c;不會看到瀏覽器打開&#xff0c;也就不會干擾你手頭的工作。對于自動化測試和網絡爬蟲都有很大的價值。早期我們使用 phantomJS 瀏覽器來實現這種模式&#xff0c;隨著 Chrome 和 Fi…

計算機函數兩個表格找相同,wps篩選出兩個表格中的重復項(countif 函數簡單使用)【已解決】...

假設&#xff0c;有以下兩個表格文件。為了掩飾&#xff0c;數據就幾個。AB兩個表格&#xff0c;現在要做的是從A表格中&#xff0c;去除跟B表格重復的內容&#xff0c;只保留剩余的數據。第一步&#xff0c;先把B表格中的 蔬菜名稱 那一列&#xff0c;復制到A表格中。(如果數據…

區分 JSON 字符串與JSON對象

&#xff08;1&#xff09;JSON 對象是滿足 JSON 數據格式的 JS 對象例如&#xff1a; {name:"abc"}最正規的 JSON 數據是連屬性名稱都要被包括起來的例如&#xff1a; {"name":"abc"}&#xff08;2&#xff09;JSON 格式的字符串的關鍵問題-- 它…