数码管绘制程序(python)

  • 题目

自行设计界面上的输出信息"加上班级 姓名  学号,日期的年月日等" 包括字体、颜色 、样式 均可自行编辑.将——————————的每一行补充正确的代码。

import turtle, datetime
def drawLine(draw):   #绘制单段数码管
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    ——————————————————————(1)————————————————————————————————
def drawDigit(digit): #根据数字绘制七段数码管
    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
    ——————————————————————(2)————————————————————————————————
    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
    ——————————————————————(3)————————————————————————————————
    turtle.left(90)
    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
    ———————————————————————(4)—————————————————————————————————
    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
    ———————————————————————(5)————————————————————————————————
    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.speed(45)
    ————————————————————————(6)————————————————————————————————
    turtle.fd(-300)
    turtle.pensize(5)
    ————————————————————————(7)———————————————————————————————
    turtle.hideturtle()
main() 

题解

1.分析:无论是绘制数字还是文字,每个笔画在画完直线后都得有转折,为下一笔做准备,故drawLine函数中的(1)应该填写控制画笔转向的语句,可以是左转也可以是右转,此处选择右转

turtle.right(90)#右转90度

2.根据数字绘制七段数码管部分(drawDight函数)需要填写数字有关的4行代码,那么需要观察现有代码找到规律

0~9数字的数码管图片如下,

drawDight 函数的第一行代码为

drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)

#如果数字参数为2,3,4,5,6,8,9,则调用drawLine函数绘制单段数码管,否则不调用

观察数字2,3,4,5,6,8,9,可以看出这7个数字均有中心横

 剩余三个不符合条件的数字0,1,7,均没有中心横,

故第一行代码完成中心横数码管的绘制

按照 drawLine函数中设置的,在画笔移动40后,笔头向右旋转90°

那么下一根绘制的将是右下竖

观察所有数字,可以得到0,1,3,4,5,6,7,8,9均含有右下竖

故(2)处应填写代码

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)实现一致

同理可得第四根绘制的数码管为左下竖,即(3)应填写代码

drawLine(True) if digit in [0,2,6,8] else drawLine(False)

至此,七段数码管的下半部分绘制完成,包含了中心横,右下竖,下横,左下竖四根数码管

要使画笔继续绘制上半部分应该挑战笔头方向

避免一直向右旋转导致循环画圈

故drawDight 函数的第五行为turtle.left(90)#左转90度

与绘制完左下竖的最后一笔右转九十度抵消,画笔向上绘制

第六行代码:drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)

操纵画笔绘制左上竖

则(4)处应填写代码

drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)

完成上横的绘制

第8行代码:drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)

则负责右上竖 数码管的绘制

一个数字的七段数码管绘制完毕

但要使其连贯进行绘制出一排数字,应加入画笔移动部分

在(5)处填写代码

turtle.left(180)

控制画笔左转180度,与最后一笔向下绘制的右下竖右转90度抵消一半

最后画笔改为左转90度

再执行代码

turtle.penup()

抬起画笔,避免移动痕迹出现
turtle.fd(20)

向前移动20个单位,即每个数字间距,

联合上面过程,画笔将置于下一个个数字中心横开始位置

drawDight 函数部分完成!

3.drawDate函数使用循环依次获取要绘制的数字

4.main函数中

先使用

turtle.setup(800, 350, 200, 200)#设置窗口大小位置

turtle.speed(45)#设置速度

在(6)后面为

turtle.fd(-300)#向后移动300个单位

故(6)应该为抬起画笔

turtle.penup()

经turtle.pensize(5) 设置好画笔大小后,(7)可以加入以下代码

# 获取当前日期
    now = datetime.datetime.now()
    year = now.strftime("%Y")
    month = now.strftime("%m")
    day = now.strftime("%d")

    # 绘制年份
    drawDate(year)
    turtle.write('年', font=("Arial", 20, "normal"))
    turtle.fd(40)

    # 绘制月份
    drawDate(month)
    turtle.write('月', font=("Arial", 20, "normal"))
    turtle.fd(40)

    # 绘制日期
    drawDate(day)
    turtle.write('日', font=("Arial", 20, "normal"))

    #绘制班级姓名学号
    turtle.penup()
    turtle.goto(-300, -100)  # 调整坐标以便在日期下方绘制
    turtle.pendown()
    
    turtle.pencolor("pink")
    turtle.write('姓名', font=("Arial", 20, "normal"))
    turtle.fd(100)
    
    turtle.pencolor("blue")
    turtle.write('班级', font=("Arial", 20, "normal"))
    turtle.fd(150)
    
    turtle.pencolor("purple")
    turtle.write('学号', font=("Arial", 20, "normal"))

使用datetime.datetime.now()获取当前日期,以年月日形式分别存放

再调用drawDate函数绘制数字

使用turtle模块中的write函数在相应位置打印“年”,“月”,“日”

最后移动画笔到(-300,-100)位置,于日期下方输出姓名班级学号

turtle模块中的color函数可以改变画笔颜色

最终运行结果为:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值