学习笔记-七段数码管绘制-带小数点

中国大学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)  #保持与下一个数字的间距

绘制效果:

学习笔记-七段数码管绘制-带小数点_第1张图片

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()

绘制效果:

学习笔记-七段数码管绘制-带小数点_第2张图片

你可能感兴趣的:(python)