首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《像计算机科学家一样思考Python》学习笔记(四)

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)

运行结果如下:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180105G00Z6P00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券