我们日常所见的霓虹灯很多都是由数码管所组成的,根据不同数码管的显色来显示不同的数字,那python语境下如何绘制数码管呢?
首先要明确数码管绘制的方式和方向:
由此代码为:
#七段数码管的绘制 from turtle import * from time import * def Gap(): #预留数码管间隙 pu() fd(6) def Line(line): #绘制单段数码管 pd() if line else pu() fd(40) Gap() right(90) def Digit(digit): #绘制七段数码管 Line(True) if digit in [2,3,4,5,6,8,9] else Line(False) Line(True) if digit in [0,1,3,4,5,6,7,8,9] else Line(False) Line(True) if digit in [0,2,3,5,6,8,9] else Line(False) Line(True) if digit in [0,2,6,8] else Line(False) left(90) Line(True) if digit in [0,4,5,6,8,9] else Line(False) Line(True) if digit in [0,2,3,5,6,7,8,9] else Line(False) Line(True) if digit in [0,1,2,3,4,7,8,9] else Line(False) left(180) pu() #为绘制后续数字确定位置 fd(20) def Date(date): #绘制日期 for i in date: if i == '年': write('年',font = ("楷体",22,"normal")) color("blue") fd(40) elif i == "月": write('月',font = ("楷体",22,"normal")) color("orange") fd(40) elif i == "日": write('日',font = ("楷体",22,"normal")) ht() else: Digit(eval(i)) #通过eval()将数字变为整数 def main(): setup(800,300,20,20) #设置画布 pu() #起笔位置 fd(-310) pensize(6) color("red") Date(strftime("%Y年%m月%d日",gmtime())) #获取当前日期 done() main()
效果图如下:
还可以通过微调笔的位置来调整文字的位置:
from turtle import * from time import * def Line(line): pd() if line else pu() fd(40) rt(90) def Digit(digit): Line(True) if digit in [2,3,4,5,6,8,9] else Line(False) Line(True) if digit in [0,1,3,4,5,6,7,8,9] else Line(False) Line(True) if digit in [0,2,3,5,6,8,9] else Line(False) Line(True) if digit in [0,2,6,8] else Line(False) lt(90) Line(True) if digit in [0,4,5,6,8,9] else Line(False) Line(True) if digit in [0,2,3,5,6,7,8,9] else Line(False) Line(True) if digit in [0,1,2,3,4,7,8,9] else Line(False) lt(180) pu() fd(20) def Date(date): for i in date: Digit(eval(i)) def main(): setup(800,280) pu() fd(-320) width(6) color('red') Date(strftime('%Y',gmtime())) rt(90) fd(40) color('black') write('年',font=('宋体', 22, 'bold')) lt(90) fd(60) lt(90) fd(40) rt(90) color('red') Date(strftime('%m',gmtime())) rt(90) fd(40) color('blue') write('月',font=("宋体", 22, "bold")) lt(90) fd(60) lt(90) fd(40) rt(90) color('red') Date(strftime('%d',gmtime())) rt(90) fd(40) color('orange') write('日',font=("宋体", 22, "bold")) ht() done() main()
效果图: