第四章接口设计主要介绍了封装,泛化等过程。个人觉得这是其他python教程中没有专门提及到的,简单来讲就是函数参数的传入过程,理解起来并不难,但是想做到能够灵活运用以减少重复代码的效果还需要多多学习。
import turtle
bob=turtle.Turtle()
输入以上命令,会创建一个新窗口,里面有个箭头代表乌龟(乌龟的名字叫bob哈哈哈哈)。
# -*- coding:utf-8 -*-
import turtle
bob=turtle.Turtle()
print(bob)
turtle.mainloop()
mainloop告诉窗口去等待用户进行某些操作。
bob.fd(100) 此命令可认为让乌龟向前移动,fd的参数是移动的距离,以像素(pixed)为单位,实际移动距离依赖于显示器的分辨率。bk为后退,,lt和rt为左转右转,pu代表笔朝上,pd为笔朝下。
下面代码可以画一个正方形:
进一步改动代码,我们画一个近似的圆,可变成多边形,最后有类似圆的效果。结果如下图所示:
# -*- coding: utf-8 -*-
import turtle
import math
def polygon(t,n,length):
angle = 360/n
for i in range(n):
t.fd(length)
t.lt(angle)
if __name__ == '__main__':
bob = turtle.Turtle()
polygon(bob, 10, 40)#10边形,半径为40
turtle.mainloop()
根据上面的代码,我们可以调处来一个圆,但发现圆太大,边线太长,圆太小,我们又要花时间去画短的边线,程序不够完美,经过进一步的修改,得到下面代码:
# -*- coding: utf-8 -*-
import turtle
import math
def polygon(t,n,length):
angle = 360/n
for i in range(n):
t.fd(length)
t.lt(angle)
def circle(t,r):
circumference= 2* math.pi*r
n=int(circumference/3)+1
length=circumference/n
polygon(t,n,length)
if __name__ == '__main__':
bob = turtle.Turtle()
circle(bob, 80)
turtle.mainloop()
看到习题4-3,写了简单的代码
# -*- coding:utf-8 -*-
import math
import turtle
bob=turtle.Turtle()
bob.lt(36)
bob.fd(60)
bob.lt(54+72)#136
bob.fd(360/5)
bob.lt(54+72)#136
bob.fd(60)
for i in range(4):
bob.lt(180)
bob.fd(60)
bob.lt(54+72)#136
bob.fd(360/5)
bob.lt(54+72)#136
bob.fd(60)
turtle.mainloop()
上述代码不具有通用性,在此基础上做了小小改动
# -*- coding:utf-8 -*-
import math
import turtle
n=9
bob=turtle.Turtle()
bob.lt(360/(2*n))
bob.fd(60)
bob.lt(90+360/(2*n))
bob.fd(360/n)
bob.lt(90+360/(2*n))
bob.fd(60)
for i in range(n-1):
bob.lt(180)
bob.fd(60)
bob.lt(90+360/(2*n))
bob.fd(360/n)
bob.lt(90+360/(2*n))
bob.fd(60)
turtle.mainloop()
上述代码中,n代表需要画出n边形,此时为9边形,运行结果如下:
注意此时我们规定了多边形内部等腰三角形腰长为60,但其实在修改多边形样子时该腰长长度对其形状有很大影响,不同形状需要设定不同的值,因此此腰长需要特定数学公式计算。