zoukankan      html  css  js  c++  java
  • 031 实例7-七段数码管绘制

    一、"七段数码管绘制"问题分析

    1.1 问题分析

    七段数码管

    031-实例7-七段数码管绘制-01.jpg?x-oss-process=style/watermark

    • 需求:用程序绘制七段数码管,似乎很有趣
    • 该怎么做呢?

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

    1.2 七段数码管绘制时间

    031-实例7-七段数码管绘制-02.jpg?x-oss-process=style/watermark

    二、"七段数码管绘制"实例讲解(上)

    2.1 基本思路

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

    2.2 步骤1

    步骤1: 绘制单个数码管

    • 七段数码管由7个基本线条组成
    • 七段数码管可以有固定顺序
    • 不同数字显示不同的线条

    031-实例7-七段数码管绘制-03.jpg?x-oss-process=style/watermark

    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)
        turtle.penup()  # 为绘制后续数字确定位置
        turtle.fd(20)  # 为绘制后续数字确定位置
    

    2.3 步骤2

    步骤2: 获取一段数字,绘制多个数码管

    031-实例7-七段数码管绘制-04.jpg?x-oss-process=style/watermark

    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)
        turtle.penup()  # 为绘制后续数字确定位置
        turtle.fd(20)  # 为绘制后续数字确定位置
    
    
    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.1 绘制漂亮的七段数码管

    • 增加七段数码管之间线条间隔

    031-实例7-七段数码管绘制-05.jpg?x-oss-process=style/watermark

    import turtle
    
    
    def drawGap():  # 绘制数码管间隔
        turtle.penup()
        turtle.fd(5)
    
    
    def drawLine(draw):  # 绘制单段数码管
        drawGap()
        turtle.pendown() if draw else turtle.penup()
        turtle.fd(40)
        drawGap()
        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)
        turtle.penup()  # 为绘制后续数字确定位置
        turtle.fd(20)  # 为绘制后续数字确定位置
    
    
    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.2 步骤3

    步骤3:获得当前系统时间,绘制对应的数码管

    • 使用time库获得系统当前时间
    • 增加年月日标记
    • 年月日颜色不同
    import turtle, time
    import turtle
    
    
    def drawGap():  # 绘制数码管间隔
        turtle.penup()
        turtle.fd(5)
    
    
    def drawLine(draw):  # 绘制单段数码管
        drawGap()
        turtle.pendown() if draw else turtle.penup()
        turtle.fd(40)
        drawGap()
        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)
        turtle.penup()  # 为绘制后续数字确定位置
        turtle.fd(20)  # 为绘制后续数字确定位置
    
    
    def drawDate(date):  #data为日期,格式为 '%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"))
            else:
                drawDigit(eval(i))
    
    
    def main():
        turtle.setup(800, 350, 200, 200)
        turtle.penup()
        turtle.fd(-300)
        turtle.pensize(5)
        drawDate(time.strftime('%Y-%M=%d+', time.gmtime()))
        turtle.hideturtle()
        turtle.done()
    
    
    main()
    

    031-实例7-七段数码管绘制-06.jpg?x-oss-process=style/watermark

    四、"七段数码管绘制"举一反

    4.1 理解方法思维

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

    4.2 应用问题的扩展

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

    031-实例7-七段数码管绘制-07.jpg?x-oss-process=style/watermark

  • 相关阅读:
    Asp.Net Web API 2第八课——Web API 2中的属性路由
    Asp.Net Web API 2第七课——Web API异常处理
    Asp.Net Web API 2第六课——Web API路由和动作选择
    Asp.Net Web API 2第五课——Web API路由
    开始学习python
    BMI 小程序 购物车
    深浅copy 文件操作
    字典 dict 集合set
    基本数据类型 (str,int,bool,tuple,)
    python 运算符
  • 原文地址:https://www.cnblogs.com/nickchen121/p/11190787.html
Copyright © 2011-2022 走看看