美文网首页
5.2 实例7:七段数码管绘制

5.2 实例7:七段数码管绘制

作者: 郭柯廷 | 来源:发表于2020-03-18 01:11 被阅读0次

    课程来源:中国大学MOOC_Python语言程序设计_北京理工大学_崇天


    五、函数和代码复用


    5.2 实例7:七段数码管绘制

    问题分析

    [图片上传失败...(image-f706b-1584465101084)

    • turtle绘图体系-->七段数码管绘制

    绘制

    • 基本思路

      • 步骤1:绘制单个数字对应的数码管
      • 步骤2:获得一串数字,绘制对应的数码管
      • 步骤3:获得当前系统时间,绘制对应的数码管
    • 步骤一:绘制单个数码管

    [图片上传失败...(image-52da59-1584465101084)

    import turtle
    def drawLine(draw):     #绘制单段数码管
        turtle.pendown() if draw else turtle.penup()
        turtle.fd(40)
        turtle.right(90)
    
    def drawDigit(digit):   #根据数字绘制七段数码管
        drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
        drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
        drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine( False)
        drawLine(True) if digit in [0,2,6,8] else drawLine(False)
        turtle.left(90)
        drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
        drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine( False)
        drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
        turtle.left(180)
    
    • 步骤2:获得一串数字,绘制对应的数码管

    [图片上传失败...(image-c6eccf-1584465101084)

    需要考虑每次绘制完后移动的距离

    def drawDate(date):     #获取要输出的数字
        for i in date:
            drawDigit(eval(i))  #通过eval()函数将数字变为整数
    
    def main():
        turtle.setup(800, 350, 200, 200)
        turtle.penup()
        turtle.fd(-300)
        turtle.pensize(5)
        drawDate('20181010')
        turtle.hideturtle()
        turtle.done()
    main()
    
    • 步骤3:获得当前系统时间,绘制对应的数码管
      • 使用time库获取系统当前时间
      • 增加年月日标记
      • 年月日颜色不同
    def drawDate(date):     #date为日期,格式为'%Y-%m=%d+'
        turtle.pencolor("red")
        for i in date:
            if i == '-':
                turtle.write('年', font=("Arial", 18, "normal"))
                turtle.pencolor("green")
                turtle.fd(40)
            elif i == '=':
                turtle.write('月', font=("Arial", 18, "normal"))
                turtle.pencolor("blue")
                turtle.fd(40)
            elif i == '+':
                turtle.write('日', font=("Arial", 18, "normal"))
                turtle.pencolor("pink")
                turtle.fd(40)
            else:
                drawDigit(eval(i))
    
    drawDate(time.strftime('%Y-%m=%d+', time.gmtime()))
    

    举一反三

    理解方法思维

    • 模块化思维:确定模块接口,封装功能
    • 规则化思维:抽象过程为规则,计算机自动执行
    • 化繁为简:将大功能变为小功能组合,分而治之

    应用问题的扩展

    • 绘制带小数点的七段数码管
    • 带刷新的时间倒计时效果
    • 绘制高级的数码管

    相关文章

      网友评论

          本文标题:5.2 实例7:七段数码管绘制

          本文链接:https://www.haomeiwen.com/subject/vfpfyhtx.html