中国大学MOOC嵩天老师的Python程序语言设计课程第5.2节
举一反三思考如何实现带小数点的七段数码管的绘制?
我采用turtle库绘制一个实心正方形,来绘制小数点。
1,先定义一个绘制小数点的函数
def drawPoint(): #绘制小数点
t.penup()
t.fd(-12.5) #保持与上一个数字的间距
t.right(90)
t.fd(45)
t.pendown()
t.begin_fill()
t.color("black")
for i in range(4): #利用for循环画出正方形
t.fd(5)
t.left(90)
t.end_fill()
t.penup()
t.fd(-45) #调整画笔回到初始位置
t.left(90)
t.fd(12.5) #保持与下一个数字的间距
绘制效果:
2,将函数代入drawDate函数的if-else 结构中
def drawDate(date):
t.pencolor("red")
for i in date:
if i == '.':#判断输入中的小数点,并调用小数点绘制函数
drawPoint()
else:
drawDight(eval(i))
3,使用time库获取当前系统时间,利用getime()函数获取当前时间,再利用strftime(str, tpl)函数将时间以模板%Y.%m.%d格式化转换
drawDate(time.strftime("%Y.%m.%d", time.gmtime()))
4,完整代码如下
# 开发时间 2021/2/21 12:00
import turtle as t
import time
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(dight): # 根据数字绘制七段数码管
drawLine(True) if dight in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if dight in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)
drawLine(True) if dight in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if dight in [0, 2, 6, 8] else drawLine(False)
t.left(90)
drawLine(True) if dight in [0, 4, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if dight in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)
drawLine(True) if dight in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)
t.left(180)
t.penup() # 为绘制后续数字确定位置
t.fd(20) # 为绘制后续数字确定位置
def drawPoint(): #绘制小数点
t.penup()
t.fd(-12.5) #保持与上一个数字的间距
t.right(90)
t.fd(45)
t.pendown()
t.begin_fill()
t.color("black")
for i in range(4): #利用for循环画出正方形
t.fd(5)
t.left(90)
t.end_fill()
t.penup()
t.fd(-45) #调整画笔回到初始位置
t.left(90)
t.fd(12.5) #保持与下一个数字的间距
def drawDate(date):
t.pencolor("red")
for i in date:
if i == '.': #判断输入中的小数点,并调用小数点绘制函数
drawPoint()
else:
drawDight(eval(i))
def main():
t.setup(800, 350, 200, 200)
t.penup()
t.fd(-300)
t.pensize(5)
t.tracer(False) #隐藏绘图,直接显示结果
drawDate(time.strftime("%Y.%m.%d", time.gmtime()))
t.hideturtle()
t.done()
main()
绘制效果: