1 turtle模块
turtle模块可以使用乌龟图形来创造图像。检查是否安装了turtle模块,可以打开Python解释器输入:
import turtle
bob=turtle.Turtle()
运行后,创建一个新的窗口,中间有一只乌龟(使用箭头表示)。
在脚本中输入如下代码后运行,此时会创建一个Turtle对象。
import turtle
bob=turtle.Turtle()
print(bob)
turtle.mainloop()
运行结果:
mainloop作用是告诉窗口等待用户进行某些操作,暂时不用考虑。
接下来可以使用Turtle对象提供的方法进行画图。Turtle对象的方法有bk(用于前进和后退),移动的距离是像素;lt、lr(用于左转和右转),旋转的角度是度;使用pu和pd(拿着笔朝上和朝下,若朝下则绘制走过的路迹)。
使用Turtle的bk和lt方法绘制正方形图像如下:
上述过程可以简化使用for循环语句实现绘图:
import turtle
bob=turtle.Turtle()
print(bob)
for i in range(4):
bob.fd(100)
bob.lt(90)
注:for循环内部语句必须有缩进。
运行结果如下:
2封装
可以定义函数,将Turtle对象作为参数,传入函数实现正方形图像的绘制,这样实现了代码用函数包裹起来,称为封装(encapsulation)。封装可以给代码一个有意义的名称,增加可读性,而且不同的对象可重复使用封装代码,简化实现代码。
实现代码如下:
def square(tur):
for i in range(4):
tur.fd(100)
tur.lt(90)
square(bob)
运行结果如下:
3泛化
书中写着“给函数添加参数的过程称为泛化(generalization),因为它会让函数变得更通用。我的理解就是将函数通用化。
实现代码如下:
def square(tur,length):
for i in range(4):
tur.fd(length)
tur.lt(90)
import turtle
bob=turtle.Turtle()
square(bob,50)
square(bob,100)
运行结果如下:
进一步将函数泛化,实现代码如下:
defsquare(tur,length,n):
angle=360/n
for i in range(n):
tur.fd(length)
tur.lt(angle)
import turtle
bob=turtle.Turtle()
square(bob,1,200)
运行结果如下:
注:Python中调用函数时可以将他们的形参加上,可以提醒编码人员正确传参,这些参数被称为关键词参数(keyword argument),这样也可以增加代码可读性。若某个参数显示形参,它右侧的参数必须全部显示,否则报错。
如:square(tur,length=1,n=200):
4重构
通过接口设计一个符合常规的圆的画法,只需要输入半径即可。
实现代码如下:
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)
bob = turtle.Turtle()
circle(bob,20)
运行结果如下:
通过重构,重新组织程序,改善接口,实现代码的复用。可以将上述代码修改为实现画弧的功能的函数。
实现代码如下:
import turtle
import math
defcircle(t,r,angle):
arc_length =2 * math.pi * r * angle/360
n=int(arc_length/3)+1
step_length=arc_length/n
step_angle=angle/n
#polygon(t,n,length)
for i in range(n):
t.fd(step_length)
t.lt(step_angle)
bob =turtle.Turtle()
circle(bob,20,180)
运行结果如下:
5文档字符串
文档字符串(docstring)是在函数开头用来解释其接口的字符串。文档字符串使用三引号括起来,三引号允许字符串跨行表示。与其他语言中函数开头的注释类似。可以用来指导编码人员设计代码。
如下代码:
#circle(bob,40,180)
defpolyline(t,n,length,angle):
"""Draws n line segmentswith the given length and
angle (in degress) between them. t is aturtle.
"""
for i in range(n):
t.fd(length)
t.lt(angle)
polyline(bob,27,10,10)
运行结果如下:
领取专属 10元无门槛券
私享最新 技术干货