一、7段数据管的绘制
7段数码管的绘制主要是为了复习函数的使用,在程序中多次调用函数,来达到简化编程,让程序可读性增强,并且达到程序复用的方法。
这段程序中主要是通过使用turtle库,和将绘制数码管的规律找出来,并让函数去执行,最后使用之前学习的time模块获取系统的时间,具体代码如下:
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): #0-9数值需要画的线条
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.write(s,font=(“font-name”,font_size,”font_type”)):写文本,s为文本内容,font是字体的参数,里面分别为字体名称,大小和类型;
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
最后效果如下:
在这里通过编写了众多的函数,来让复杂的程序变得简单了许多。
二、科赫雪花的绘制
科赫雪花来自于科赫曲线,就是每条直线的中间三分之一进行上凸成一个缺少底边的等边三角形,这样就有四条曲线。第二次四条曲线分别执行第一步的操作,因此类推。
这里主要使用的就是递归的思想,之前学习过斐波拉契数列和汉诺塔这样简单的递归,这次学习了一个复杂一点。代码如下:
import turtle
def koch(size, n):
if n == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, n-1)
def main():
turtle.setup(600,600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
level = 3
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.hideturtle()
这是3阶的,效果如下:
如果需要更高阶的,直接改变level就行了,试一下四阶的:
这个时间真的有点长了,当然还可以让这个更好看,更改画笔颜色,还有更多的别的复杂的递归以后也要去学习,嵩天老师的课还是受益很多。