七段数码管由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()