-
题目
自行设计界面上的输出信息"加上班级 姓名 学号,日期的年月日等" 包括字体、颜色 、样式 均可自行编辑.将——————————的每一行补充正确的代码。
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函数可以改变画笔颜色
最终运行结果为: