我们日常所见的霓虹灯很多都是由数码管所组成的,根据不同数码管的显色来显示不同的数字,那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()
效果图: