Python turtle繪圖教程之七段數(shù)碼管顯示數(shù)字和字母
一、運行結果
二、程序設計
七段數(shù)碼管由7條線組成,以下圖所標識的畫圖順序為準進行程序設計。
首先導入turtle庫并將其重命名為t。
import turtle as t
定義函數(shù)drawGap()用于繪制間隙,通過將畫筆抬起,并向前移動5個單位,來實現(xiàn)間隙的繪制。
def drawGap(): # 繪制間隙 t.penup() t.fd(5) # 設置間隙大小
定義函數(shù)drawLine(draw)用于繪制線段,通過判斷參數(shù)draw
的布爾值,決定是否下筆繪制線段。如果布爾值為True
,則將畫筆放下,向前移動40個單位;如果布爾值為False
,則將畫筆抬起,向前移動40個單位。然后調(diào)用drawGap()
函數(shù)繪制間隙,并將畫筆右轉90度,準備繪制下一段線。
def drawLine(draw): # 繪制數(shù)碼管中的一段線 drawGap() t.pendown() if draw else t.penup() t.fd(40) drawGap() t.right(90)
之后,我們根據(jù)所要繪制的數(shù)字和字母定義函數(shù)drawDight(s),下圖是數(shù)字和字母的數(shù)碼管顯示圖。
以1號線段為例,數(shù)字中包含它的有2,3,4,5,6,8,9,字母中包含它的有a,b,d,e,f,h,k,n,o,p,q,s,t,w,x,y,z。
然后定義drawDight(s)函數(shù),根據(jù)字符s
繪制七段數(shù)碼管。
根據(jù)不同的字符,調(diào)用drawLine()
函數(shù)繪制對應的線段。通過判斷字符s
的值,決定繪制哪些線段。每繪制完一組線段,將畫筆左轉90度,準備繪制下一組線段。
def drawDight(s): # 根據(jù)字符繪制七段數(shù)碼管 # 繪制1號線段 drawLine(True) if s in ['2','3','4','5','6','8','9','a','b','d','e','f','h','k','n','o','p','q','s','t','w','x','y','z'] else drawLine(False) # 繪制2號線段 drawLine(True) if s in ['0','1','3','4','5','6','7','8','9','a','b','d','g','h','i','j','k','m','n','o','q','u','v','w','x','y'] else drawLine(False) # 繪制3號線段 drawLine(True) if s in ['0','2','3','5','6','8','9','b','c','d','e','g','i','j','l','o','s','t','u','v','w','y','z'] else drawLine(False) # 繪制4號線段 drawLine(True) if s in ['0','2','6','8','a','b','c','d','e','f','g','h','k','l','m','n','o','p','r','t','u','v','w','z'] else drawLine(False) t.left(90) # 繪制5號線段 drawLine(True) if s in ['0','4','5','6','8','9','a','b','c','e','f','g','h','k','l','m','p','q','r','t','u','w','x','y'] else drawLine(False) # 繪制6號線段 drawLine(True) if s in ['0','2','3','5','6','7','8','9','a','c','e','f','g','i','k','m','p','q','r','s'] else drawLine(False) # 繪制7號線段 drawLine(True) if s in ['0','1','2','3','4','7','8','9','a','d','h','i','j','m','p','q','u','w','y','z'] else drawLine(False) t.right(180) t.penup() t.fd(30)
定義drawStr(Str)
函數(shù),用于依次繪制輸入的字符串中的每個字符,通過遍歷字符串中的每個字符,調(diào)用drawDight()
函數(shù)進行繪制。
def drawStr(Str): for x in Str: drawDight(x)
定義main()
函數(shù),用于設置全局參數(shù)和執(zhí)行繪制操作。
在函數(shù)中,首先通過input()
函數(shù)獲取用戶輸入的一段字符,并將其賦值給變量a
。
然后設置畫筆顏色為紅色,設置窗口大小為1280x720,隱藏畫筆,設置繪圖速度為0,即最快速度,將畫筆抬起并向后移動400個單位(設置繪圖起點),設置畫筆大小為5。
接著調(diào)用drawStr(a)
函數(shù)來繪制用戶輸入的字符。
最后調(diào)用t.done()
表示繪制完成。
def main(): # 全局設置 a=input('請輸入一段字符:') t.pencolor('red') # 設置畫筆的顏色 t.setup(1280,720) # 設置窗口的大小 t.hideturtle() # 隱藏畫筆 t.speed(0) # 設置畫圖速度 t.penup() t.fd(-400) # 設置繪圖起點 t.pensize(5) # 設置畫筆大小 drawStr(a) t.done()
最后調(diào)用main()
函數(shù)來執(zhí)行整個繪制過程。
main()
三、源代碼
import turtle as t def drawGap(): # 繪制間隙 t.penup() t.fd(5) # 設置間隙大小 def drawLine(draw): # 繪制數(shù)碼管中的一段線 drawGap() t.pendown() if draw else t.penup() t.fd(40) drawGap() t.right(90) def drawDight(s): # 根據(jù)字符繪制七段數(shù)碼管 # 繪制1號線段 drawLine(True) if s in ['2','3','4','5','6','8','9','a','b','d','e','f','h','k','n','o','p','q','s','t','w','x','y','z'] else drawLine(False) # 繪制2號線段 drawLine(True) if s in ['0','1','3','4','5','6','7','8','9','a','b','d','g','h','i','j','k','m','n','o','q','u','v','w','x','y'] else drawLine(False) # 繪制3號線段 drawLine(True) if s in ['0','2','3','5','6','8','9','b','c','d','e','g','i','j','l','o','s','t','u','v','w','y','z'] else drawLine(False) # 繪制4號線段 drawLine(True) if s in ['0','2','6','8','a','b','c','d','e','f','g','h','k','l','m','n','o','p','r','t','u','v','w','z'] else drawLine(False) t.left(90) # 繪制5號線段 drawLine(True) if s in ['0','4','5','6','8','9','a','b','c','e','f','g','h','k','l','m','p','q','r','t','u','w','x','y'] else drawLine(False) # 繪制6號線段 drawLine(True) if s in ['0','2','3','5','6','7','8','9','a','c','e','f','g','i','k','m','p','q','r','s'] else drawLine(False) # 繪制7號線段 drawLine(True) if s in ['0','1','2','3','4','7','8','9','a','d','h','i','j','m','p','q','u','w','y','z'] else drawLine(False) t.right(180) t.penup() t.fd(30) def drawStr(Str): for x in Str: drawDight(x) def main(): # 全局設置 a=input('請輸入一段字符:') t.pencolor('red') # 設置畫筆的顏色 t.setup(1280,720) # 設置窗口的大小 t.hideturtle() # 隱藏畫筆 t.speed(0) # 設置畫圖速度 t.penup() t.fd(-400) # 設置繪圖起點 t.pensize(5) # 設置畫筆大小 drawStr(a) t.done() main()
附:14位數(shù)碼管,畫英文,和數(shù)字
import datetime import turtle name = [] def drawLine(draw): # 繪制單段數(shù)碼管 turtle.pendown() if draw else turtle.penup() turtle.fd(40) turtle.right(90) def drawLine1(draw): # 繪制單段數(shù)碼管1 turtle.pendown() if draw else turtle.penup() turtle.fd(20) def drawtdown1(draw): # 斜線 turtle.pendown() if draw else turtle.penup() turtle.fd(44.7) def drawDigit(digit): # 根據(jù)數(shù)字繪制七段數(shù)碼管 # 橫1筆 drawLine1(True) if digit in [2, 4, 5, 6, 8, 9, 'A', 'E', 'F', 'H', 'K', 'P', 'R', 'S'] else drawLine1(False) # 橫2筆 drawLine1(True) if digit in [2, 3, 4, 5, 6, 8, 9,'F', 'A','B','G','H','P,'R',S'] else drawLine1(False) # 第3筆 turtle.right(90) drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'D', 'G', 'H', 'J', 'M', 'N' , 'O', 'Q', 'S', 'U', 'W'] else drawLine(False) # 第4筆 drawLine(True) if digit in ['L',0, 2, 3, 5, 6, 8, 9, 'B', 'C', 'D', 'E', 'G', 'I', 'U','J', 'O', 'Q', 'S', 'Z'] else drawLine(False) # 第5筆 drawLine(True) if digit in ['L',0, 2, 6, 8, 'A', 'C' , 'E' , 'F' , 'G', 'H' , 'J' , 'K' , 'L' , 'M' , 'N' ,'O' , 'P' , 'Q' ,'R' , 'U' , 'V' , 'W'] else drawLine(False) # 第6筆(因為會右轉,這里調(diào)節(jié)第五筆為向上直線) turtle.left(90) drawLine(True) if digit in ['L',0, 4, 5, 6, 8, 9, 'A','C','E','F','G','H','K','M','N','O','P','Q','R','S','U','V','W'] else drawLine(False) # 第7筆 drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9, 'A','B','C','D','E','F','G','O','P','Q','R','I','S','T','Z'] else drawLine(False) # 第8筆 drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9, 'A','B','D','H','J','M','N','O','P','Q','R','U','W'] else drawLine(False) # 第9筆 turtle.left(90) turtle.penup() turtle.fd(40) turtle.right(90 + 63.4) drawtdown1(True) if digit in ['K','N','Q','K','N','Q','R','W','X'] else drawtdown1(False) # 第10筆******************** drawtdown1(True) if digit in ['M','N','X','Y'] else drawtdown1(False) # 第11筆******************** turtle.right(90 + 26.6) turtle.penup() turtle.fd(20) turtle.right(90) drawLine(True) if digit in ['B','D','I','T'] else drawLine(False) # 第12筆*********** turtle.left(90) drawLine(True) if digit in ['B','D','I','T','Y'] else drawLine(False) # 第13筆 turtle.penup() turtle.fd(20) turtle.right(90 + 26.6) drawtdown1(True) if digit in ['V','X','Z','W', 0] else drawtdown1(False) # 第14筆 drawtdown1(True) if digit in ['M','V','X','Y','Z','K', 0, 1] else drawtdown1(False) turtle.right(90 + 63.4) turtle.penup() turtle.fd(40) turtle.left(90) turtle.fd(20) def drawDate(date): turtle.pencolor("black") for i in date: if i == '-': turtle.write('年', font=("Arial", 25, "normal")) turtle.pencolor("black") turtle.fd(40) elif i == '=': turtle.write('月', font=("Arial", 25, "normal")) turtle.pencolor("black") turtle.fd(40) elif i == '+': turtle.write('日', font=("Arial", 25, "normal")) else: drawDigit(eval(i)) def drawname(): #name = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] name = ['L', 'O', 'N', 'G',' ', 'T', 'A', 'O'] #name = [ 'I',' ','L','O','V','E', ' ', 'Y','O','U'] for i in name: drawDigit(i) def main(): turtle.setup(800, 350, 200, 200) turtle.penup() turtle.goto(-300, 50) turtle.pensize(5) turtle.pencolor("black") turtle.speed(0)#這個讓烏龜跑快點,慢慢爬真的難受,想慢點的同志把這個注釋就行 drawDate(datetime.datetime.now().strftime('%Y-%m=%d+')) turtle.penup() turtle.goto(-200, -100) turtle.pencolor('red') drawname() turtle.hideturtle() turtle.exitonclick()#畫完不關閉畫布,點擊關閉 main()
總結
到此這篇關于Python turtle繪圖教程之七段數(shù)碼管顯示數(shù)字和字母的文章就介紹到這了,更多相關Python七段數(shù)碼管顯示數(shù)字和字母內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python?十大經(jīng)典排序算法實現(xiàn)詳解
排序算法是《數(shù)據(jù)結構與算法》中最基本的算法之一。排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存2022-01-01Python實現(xiàn)以主程序的形式執(zhí)行模塊
這篇文章主要介紹了Python實現(xiàn)以主程序的形式執(zhí)行模塊,首先創(chuàng)建一個以christmastree的命名的模塊并定義一個全局變量創(chuàng)建一個名稱為fun_christmastree()的函數(shù)展開詳情,感興趣的朋友可以參考一下2022-06-06Python實現(xiàn)的生產(chǎn)者、消費者問題完整實例
這篇文章主要介紹了Python實現(xiàn)的生產(chǎn)者、消費者問題,簡單描述了生產(chǎn)者、消費者問題的概念、原理,并結合完整實例形式分析了Python實現(xiàn)生產(chǎn)者、消費者問題的相關操作技巧,需要的朋友可以參考下2018-05-05Python?Pandas中DataFrame.drop_duplicates()刪除重復值詳解
在實際處理數(shù)據(jù)中,數(shù)據(jù)預處理操作中,常常需要去除掉重復的數(shù)據(jù),這篇文章主要給大家介紹了關于Python?Pandas中DataFrame.drop_duplicates()刪除重復值的相關資料,需要的朋友可以參考下2022-07-07在python image 中安裝中文字體的實現(xiàn)方法
今天小編大家分享一篇在python image 中安裝中文字體的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08