Python turtle绘图——七段数码管显示数字和字母
一、运行结果
二、程序设计
七段数码管由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 tdef 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()
来源地址:https://blog.csdn.net/ZYB1300704781/article/details/131748443
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341