课程来源:中国大学MOOC_Python语言程序设计_北京理工大学_崇天
五、函数和代码复用
- 5.1 函数的定义与使用
- 5.2 实例7:七段数码管绘制
- 5.3 代码复用与函数递归
- 5.4 模块4:PyInstaller库的使用
- 5.5 实例8:科赫雪花小包裹
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()))
举一反三
理解方法思维
- 模块化思维:确定模块接口,封装功能
- 规则化思维:抽象过程为规则,计算机自动执行
- 化繁为简:将大功能变为小功能组合,分而治之
应用问题的扩展
- 绘制带小数点的七段数码管
- 带刷新的时间倒计时效果
- 绘制高级的数码管