七段数码管绘制

-需求:用程序绘制七段数码管

-该怎么做?

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

基本思路:

-步骤一:绘制单个数字对应的数码管

-步骤二:获得一串数字,绘制对应的数码管

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

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)                    #为绘制后续数字确定位置

根据参数digit来决定如何绘制对应的数字,参数digit是一个数字,取值范围是0~9,然后我们判断当前给的整数是几,如果你给的整数是8,那么你的每一条线段都要被真实绘制,如果给的整数是0,那你的第一条线段就不需要被绘制。

import turtle

def drawLine(draw):             #绘制单段数码管。定义了一个函数drawLine(),用于绘制单段数码管。如果drawTrue,则将画笔降下(pendown),否则将画笔抬起(penup)。然后向前移动40个像素(fd(40)),再右转90度(right(90))。

    turtle.pendown() if draw else turtle.penup()

    turtle.fd(40)

    turtle.right(90)

def drawDigit(digit):           #根据数字绘制七段数码管。定义了一个函数drawDigit(),用于根据给定的数字绘制七段数码管。根据不同的数字,通过调用drawLine()函数来绘制对应的数码管段。在绘制完每个数字后,画笔移动到下一个数字的起始位置。

    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)          # 绘制第1段数码管,对应数字2、3、4、5、6、8、9

    drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)    # 绘制第2段数码管,对应数字0、1、3、4、5、6、7、8、9

    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)         # 绘制第3段数码管,对应数字0、2、3、5、6、8、9

    drawLine(True) if digit in [0,2,6,8] else drawLine(False)                 # 绘制第4段数码管,对应数字0、2、6、8

    turtle.left(90)

    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)            #  绘制第5段数码管,对应数字0、4、5、6、8、9

    drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)      # 绘制第6段数码管,对应数字0、2、3、5、6、7、8、9

    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)     # 绘制第7段数码管,对应数字01234789

    turtle.left(180)

    turtle.penup()                 #为绘制后续数字确定位置

    turtle.fd(20)                    #为绘制后续数字确定位置

def drawDate(date):           #获得要输出的数字。定义了一个函数drawDate(),用于根据给定的日期字符串绘制相应的数字。它遍历日期字符串中的每个字符,并将字符转换为数字,并调用drawDigit()函数绘制对应的数字。

    for i in date:

        drawDigit(eval(i))       #通过eval()函数将数字变为整数

def main():                                   #设置一些初始值。定义了一个主函数main(),在这个函数中设置了绘制窗口的大小(setup()),将画笔抬起(penup()),向左移动300个像素(fd(-300)),设置画笔的大小为5个像素(pensize(5)),调用drawDate()函数绘制日期字符串对应的数字,隐藏海龟图标(hideturtle()),最后调用turtle模块的done()函数以结束程序。

    turtle.setup(800,350,200,200)

    turtle.penup()

    turtle.fd(-300)

    turtle.pensize(5)

    drawDate('20181010')

    turtle.hideturtle()

    turtle.done()

main()

深入讲解

基本思路

-步骤1:绘制单个数字对应的数码管

-步骤2:获得一串数字,绘制对应的数码管

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

-使用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):           #根据数字绘制七段数码管。定义了一个函数drawDigit(),用于根据给定的数字绘制七段数码管。根据不同的数字,通过调用drawLine()函数来绘制对应的数码管段。在绘制完每个数字后,画笔移动到下一个数字的起始位置。

    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)          # 绘制第1段数码管,对应数字2345689

    drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)    # 绘制第2段数码管,对应数字0、1、3、4、5、6、7、8、9

    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)         # 绘制第3段数码管,对应数字0、2、3、5、6、8、9

    drawLine(True) if digit in [0,2,6,8] else drawLine(False)                 # 绘制第4段数码管,对应数字0、2、6、8

    turtle.left(90)

    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)            #  绘制第5段数码管,对应数字0、4、5、6、8、9

    drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)      # 绘制第6段数码管,对应数字0、2、3、5、6、7、8、9

    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)     # 绘制第7段数码管,对应数字0、1、2、3、4、7、8、9

    turtle.left(180)

    turtle.penup()                 #为绘制后续数字确定位置

    turtle.fd(20)                    #为绘制后续数字确定位置

def drawDate(date):           #获得要输出的数字。定义了一个函数drawDate(),用于根据给定的日期字符串绘制相应的数字。它遍历日期字符串中的每个字符,并将字符转换为数字,并调用drawDigit()函数绘制对应的数字。

    for i in date:

        drawDigit(eval(i))       #通过eval()函数将数字变为整数

def main():                                   #设置一些初始值。定义了一个主函数main(),在这个函数中设置了绘制窗口的大小(setup()),将画笔抬起(penup()),向左移动300个像素(fd(-300)),设置画笔的大小为5个像素(pensize(5)),调用drawDate()函数绘制日期字符串对应的数字,隐藏海龟图标(hideturtle()),最后调用turtle模块的done()函数以结束程序。

    turtle.setup(800,350,200,200)

    turtle.penup()

    turtle.fd(-300)

    turtle.pensize(5)

    drawDate('20181010')

    turtle.hideturtle()

    turtle.done()

main()

import turtle,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"))

        else:

           drawDight(eval(i))

def main():

...(略)

import turtle

import time

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):               # 获得要输出的数字

    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))     # 通过eval()函数将数字变为整数

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

举一反三

理解思维方法

-模块化思维:确定模块接口,封装功能

-规则化思维:抽象过程为规则,计算机自动执行

-化繁为简:将大功能变为小功能,分而治之

应用问题扩展

-绘制带小数点的七段数码管

-带刷新的时间倒计时效果

-绘制高级的数码管

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值