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)

运行结果如下:

python绘制正方形、利用turlr_《像计算机科学家一样思考Python》学习笔记(四)...相关推荐

  1. 像计算机科学家一样思考python 百度网盘_像计算机科学家一样思考Python PDF_Python教程...

    资源名称:像计算机科学家一样思考Python PDF 第1章 程序之道 1 1.1 Python编程语言 1 1.2 什么是程序 3 1.3 什么是调试 3 1.4 语法错误 3 1.5 运行时错误 ...

  2. 《像计算机科学家一样思考Python》——第4章 案例研究:接口设计 4.1 乌龟世界...

    本节书摘来自异步社区<像计算机科学家一样思考Python>一书中的第4章,第4.1节,作者[美]Allen B. Downey,赵普明 译,更多章节内容可以访问云栖社区"异步社区 ...

  3. 《像计算机科学家一样思考Python》——4.4 封装

    本节书摘来自异步社区<像计算机科学家一样思考Python>一书中的第4章,第4.4节,作者[美]Allen B. Downey,赵普明 译,更多章节内容可以访问云栖社区"异步社区 ...

  4. 《像计算机科学家一样思考Python(第2版)》——2.6 字符串操作

    本节书摘来自异步社区<像计算机科学家一样思考Python(第2版)>一书中的第2章,第2.6节,作者[美] Allen B. Downey,赵普明 译,更多章节内容可以访问云栖社区&quo ...

  5. 《像计算机科学家一样思考Python》——3.9 变量和形参是局部的

    本节书摘来自异步社区<像计算机科学家一样思考Python>一书中的第3章,第3.9节,作者[美]Allen B. Downey,赵普明 译,更多章节内容可以访问云栖社区"异步社区 ...

  6. 《像计算机科学家一样思考Python》pdf

    下载地址:网盘下载 内容简介  · · · · · · <像计算机科学家一样思考python>按照培养读者像计算机科学家一样的思维方式的思路来教授python语言编程.全书贯穿的主体是如何 ...

  7. 《像计算机科学家一样思考Python(第2版)》——2.7 注释

    本节书摘来自异步社区<像计算机科学家一样思考Python(第2版)>一书中的第2章,第2.7节,作者[美] Allen B. Downey,赵普明 译,更多章节内容可以访问云栖社区&quo ...

  8. 《像计算机科学家一样思考Python(第2版)》——1.3 第一个程序

    本节书摘来自异步社区<像计算机科学家一样思考Python(第2版)>一书中的第1章,第1.3节,作者[美] Allen B. Downey,赵普明 译,更多章节内容可以访问云栖社区&quo ...

  9. 像科学家一样思考python答案_像计算机科学家一样思考python-第4章 案例研究:接口设计...

    系统环境 ubuntu18 4.1turtle模块 模块一开始导入turtle模块就报错了 1 Python 3.6.5 (default, Apr 1 2018, 05:46:30)2 [GCC 7 ...

  10. 像计算机科学家一样思考python

    18 继承(inheritance) 继承 是面向对象编程 的一种语言特性: 它能 通过对现有的某个类稍作修改的方式 定义一个新的类. 现有的类 称为 父类, 新的类 称为子类. 之所以被称为 继承, ...

最新文章

  1. 【CV】Anaconda 安装教程|CSDN创作打卡
  2. pandas中df的用法
  3. android英文文献翻译,有关android技术英文文献翻译
  4. 【数据结构与算法】之深入解析“最长公共前缀”的求解思路与算法示例
  5. 基于CAD/CAM的三维控件
  6. java calendar字符串显示_java关于字符串和日期的代码展示
  7. eShopOnContainers 看微服务③:Identity Service
  8. P3768 简单的数学题(杜教筛)
  9. cf1523C. Compression and Expansion
  10. TIBCO产品的微服务和DevOps
  11. SQL注入:3、无权读取information_schema库和拒绝union、order by语句
  12. 截取台风后的图片_今年首个台风来袭!“大黄蜂”下,货代如何“防台”?
  13. HTML示例06---水平线
  14. Hadoop之MapReduce理论篇01
  15. base64图裁剪 php_3分钟短文 | 有挑战!PHP用1个函数实现post请求,你用哪个?
  16. 手机CPU天梯图2018年5月最新版
  17. # Scroll 系列
  18. 局域网我的世界找不到服务器,我的世界局域网为什么连接不到服务器
  19. win11文件资源管理器
  20. 哈啰出行高质量故障复盘法:“3+5+3”(附模板)

热门文章

  1. 【广告技术】用张量分解预测广告库存,广告投放更可靠!
  2. 【王牌选手分享】一发问鼎!鹅厂大神上分思路,助你玩转初赛!
  3. maven netty 配置_Netty是业界最流行的NIO框架之一:初识Netty
  4. php批量添加excel数据库表,php 把excel批量导入到数据库代码
  5. 计算机知识点数制的概念,计算机等级考试,数制的基本概念知识点
  6. scipy.cluster模块实现kmeans聚类
  7. Linux无root权限安装opencv3.4.0以及一些问题
  8. XML校验 黄色惊叹号!!!
  9. matlab调和均值滤波_matlab均值滤波(原创).doc
  10. keyshot卡住了还能保存吗_KeyShot常见问题汇总及解答(附图)!