我们日常所见的霓虹灯很多都是由七段数码管所组成的,根据不同数码管的显色来显示不同的数字,那 python 语境下如何绘制七段数码管呢?
首先要明确七段数码管绘制的方式和方向:
由此代码为:
#七段数码管的绘制
from turtle import *
from time import *
def Gap(): #预留数码管间隙
pu()
fd(4)
def Line(line): #绘制单段数码管
Gap()
pd() if line else pu()
fd(40)
Gap()
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:
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)
width(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('green')
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('tomato')
Date(strftime('%d',gmtime()))
rt(90)
fd(40)
color('orange')
write('日',font=('宋体', 22, 'bold'))
ht()
done()
main()
效果图:
对于为 turtle 复位而重复出现的代码,可以通过定义函数以实现代码复用,如 Gap() 及 re():
from turtle import *
from time import *
def Gap():
pu()
fd(4)
def Line(line):
Gap()
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)
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 re(): #实现turtle复位
lt(90)
fd(60)
lt(90)
fd(40)
rt(90)
def main():
setup(800,300)
pu()
fd(-345)
width(6)
color('red')
Date(strftime('%Y',gmtime()))
rt(90)
fd(40)
color('black')
write('年',font=('宋体', 22, 'bold'))
re()
color('green')
Date(strftime('%m',gmtime()))
rt(90)
fd(40)
color('blue')
write('月',font=("宋体", 22, "bold"))
re()
color('tomato')
Date(strftime('%d',gmtime()))
rt(90)
fd(40)
color('orange')
write('日',font=("宋体", 22, "bold"))
ht()
done()
main()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/106993.html