Python turtle绘图教程之七段数码管显示数字和字母
作者:Corone
一、运行结果
二、程序设计
七段数码管由7条线组成,以下图所标识的画图顺序为准进行程序设计。
首先导入turtle库并将其重命名为t。
import turtle as t
定义函数drawGap()用于绘制间隙,通过将画笔抬起,并向前移动5个单位,来实现间隙的绘制。
def drawGap(): # 绘制间隙 t.penup() t.fd(5) # 设置间隙大小
定义函数drawLine(draw)用于绘制线段,通过判断参数draw
的布尔值,决定是否下笔绘制线段。如果布尔值为True
,则将画笔放下,向前移动40个单位;如果布尔值为False
,则将画笔抬起,向前移动40个单位。然后调用drawGap()
函数绘制间隙,并将画笔右转90度,准备绘制下一段线。
def drawLine(draw): # 绘制数码管中的一段线 drawGap() t.pendown() if draw else t.penup() t.fd(40) drawGap() t.right(90)
之后,我们根据所要绘制的数字和字母定义函数drawDight(s),下图是数字和字母的数码管显示图。
以1号线段为例,数字中包含它的有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)函数,根据字符s
绘制七段数码管。
根据不同的字符,调用drawLine()
函数绘制对应的线段。通过判断字符s
的值,决定绘制哪些线段。每绘制完一组线段,将画笔左转90度,准备绘制下一组线段。
def drawDight(s): # 根据字符绘制七段数码管 # 绘制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)
函数,用于依次绘制输入的字符串中的每个字符,通过遍历字符串中的每个字符,调用drawDight()
函数进行绘制。
def drawStr(Str): for x in Str: drawDight(x)
定义main()
函数,用于设置全局参数和执行绘制操作。
在函数中,首先通过input()
函数获取用户输入的一段字符,并将其赋值给变量a
。
然后设置画笔颜色为红色,设置窗口大小为1280x720,隐藏画笔,设置绘图速度为0,即最快速度,将画笔抬起并向后移动400个单位(设置绘图起点),设置画笔大小为5。
接着调用drawStr(a)
函数来绘制用户输入的字符。
最后调用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()
最后调用main()
函数来执行整个绘制过程。
main()
三、源代码
import turtle as t def drawGap(): # 绘制间隙 t.penup() t.fd(5) # 设置间隙大小 def drawLine(draw): # 绘制数码管中的一段线 drawGap() t.pendown() if draw else t.penup() t.fd(40) drawGap() t.right(90) def drawDight(s): # 根据字符绘制七段数码管 # 绘制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位数码管,画英文,和数字
import datetime import turtle name = [] def drawLine(draw): # 绘制单段数码管 turtle.pendown() if draw else turtle.penup() turtle.fd(40) turtle.right(90) def drawLine1(draw): # 绘制单段数码管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): # 根据数字绘制七段数码管 # 横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笔(因为会右转,这里调节第五笔为向上直线) 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绘图教程之七段数码管显示数字和字母的文章就介绍到这了,更多相关Python七段数码管显示数字和字母内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!