第8章程序设计方法论_第1页
第8章程序设计方法论_第2页
第8章程序设计方法论_第3页
第8章程序设计方法论_第4页
第8章程序设计方法论_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章

程序设计方法论第8章程序设计方法论全文共83页,当前为第1页。人生苦短,请用Python。Life

is

short.

You

need

Python.

——布鲁斯∙埃克尔(Bruce

Eckel)ANSI/ISO

C++标准委员会发起者之一第8章程序设计方法论全文共83页,当前为第2页。学习目标

1.

了解计算思维的概念;

2.

掌握自顶向下的设计方法;

3.

掌握自底向上的执行过程;

4.

掌握Python

第三方库的安装方法;

5.

掌握Python

源文件的打包方法。第8章程序设计方法论全文共83页,当前为第3页。计算思维第8章程序设计方法论全文共83页,当前为第4页。要点

计算思维是人类科学思维活动的重要组成部分,与逻辑思维和实证思维同等重要。第8章程序设计方法论全文共83页,当前为第5页。计算思维

计算思维是人类科学思维活动的重要组成部分。人

类在认识世界、改造世界过程中表现出三种基本的思

维特征:以实验和验证为特征的实证思维,以物理学科为代表;以推理和演绎为特征的逻辑思维,以数学学科为代表;以设计和构造为特征的计算思维,以计算机学科为代表。第8章程序设计方法论全文共83页,当前为第6页。计算思维

计算思维是计算机科学发展到一定程度而提出的,

它是人类逐渐意识到计算机解决问题的强大能力后而

自然产生的思维模式,具有显著的时代特性。第8章程序设计方法论全文共83页,当前为第7页。计算思维

程序设计是实践计算思维的重要手段

抽象实际问题的计算特性,利用计算机去求解

计算思维的本质

是抽象(Abstraction)和自动化(Automation)。第8章程序设计方法论全文共83页,当前为第8页。计算思维

在程序设计范畴,计算思维主要反映在理解问题的

计算特性、将计算特性抽象为计算问题、通过程序设

计语言实现问题的自动求解等几个方面。第8章程序设计方法论全文共83页,当前为第9页。自顶向下设计第8章程序设计方法论全文共83页,当前为第10页。要点

程序需要采用自顶向下设计方法,采用自底向上的执行过程。第8章程序设计方法论全文共83页,当前为第11页。自顶向下的设计方法

以一个总问题开始,试图把它表达为很多小问题组

成的解决方案。再用同样的技术依次攻破每个小问题

,最终问题变得非常小,以至于可以很容易解决。然

后只需把所有的碎片组合起来,就可以得到一个程序第8章程序设计方法论全文共83页,当前为第12页。顶层设计

自顶向下设计中最重要的是顶层设计。

以体育竞技分析为例,可以从问题的IPO描述开始

。大多数程序都可以简单将IPO

描述直接用到程序结

构设计中,体育竞技分析从用户得到模拟参数模拟比

赛,最后输出结果。第8章程序设计方法论全文共83页,当前为第13页。顶层设计

步骤1:

打印程序的介绍性信息;

步骤2:获得程序运行需要的参数:probA,

probB,n;

步骤3:利用球员A

和B

的能力值probA

和probB,模拟n

次比赛;

步骤4:输出球员A

和B

获胜比赛的场次及概率。第8章程序设计方法论全文共83页,当前为第14页。顶层设计

步骤1

输出一些介绍信息,针对提升用户体验十分有益。

顶层设计一般不写出具体代码,仅给出函数定义,其中,printIntro()函数打印一些必要的说明第8章程序设计方法论全文共83页,当前为第15页。顶层设计

步骤2

获得用户输入。

通过函数将输入语句及输入格式等细节封装或隐藏

,只需要假设程序如果调用了getInputs()函数即可

获取变量

probA,

probB

n

的值。这个函数必须

为主程序返回这些值,截止第2步。第8章程序设计方法论全文共83页,当前为第16页。顶层设计

步骤3

需要使用probA、probB

模拟n场比赛。

此时,可以采用解决步骤

2

的类似方法,设计一个simNGames()函数来模拟n场比赛,并返回结果。按照体育竞技问题的要求,该函数需要模拟比赛,并获得球员A

和球员B赢得比赛的结果。第8章程序设计方法论全文共83页,当前为第17页。顶层设计

步骤4

输出结果,设计思想类似,仍然只规划功能和函数第8章程序设计方法论全文共83页,当前为第18页。顶层设计原

4

printIntro()

,getInputs(),simNGames()和printSummary()。分解过程让程序员在这一步不必关心具体细节而专心考虑程序的结构设计第8章程序设计方法论全文共83页,当前为第19页。设计过程总结

结合体育竞技实例介绍了自顶向下的设计过程。从

问题输入输出确定开始,整体设计逐渐向下进行。每

一层以一个大体算法描述,然后逐步细化成代码,细

节被函数封装第8章程序设计方法论全文共83页,当前为第20页。自顶向下设计过程

自顶向下设计是一种开发复杂程序最具价值的设计

理念和工具,设计过程自然且简单,自顶向下设计通

过封装实现抽象,利用了模块化方法的思想第8章程序设计方法论全文共83页,当前为第21页。自底向上执行第8章程序设计方法论全文共83页,当前为第22页。自底向上执行

开展测试的更好办法也是将程序分成小部分逐个测试

执行中等规模程序的最好方法是从结构图最底层开

始,而不是从顶部开始,然后逐步上升。或者说,先

运行和测试每一个基本函数,再测试由基础函数组成

的整体函数,这样有助于定位错误第8章程序设计方法论全文共83页,当前为第23页。计算生态和模块编程第8章程序设计方法论全文共83页,当前为第24页。要点

Python

语言有9万多个第三方库,形成了庞大的计算生态,模块编程思想是Python

语言最大的价值第8章程序设计方法论全文共83页,当前为第25页。计算生态

近20年的开源运动产生了深植于各信息技术领域的

大量可重用资源,直接且有力的支撑了信息技术超越

其他技术领域的发展速度,形成了“计算生态”。产

业界广泛利用可重用资源快速构建应用已经是主流产

品开发方式。第8章程序设计方法论全文共83页,当前为第26页。Python的计算生态

Python

语言从诞生之初致力于开源开放,建立了全球最大的编程计算生态。

Python

官方网站提供了第三方库索引功能

/pypi第8章程序设计方法论全文共83页,当前为第27页。Python的计算生态

该页面列出了Python

语言9

万多个第三方库的基本

信息,这些函数库覆盖信息领域技术所有技术方向。

这里需要说明,Python

语言的函数库并非都采用

Python

语言编写。第8章程序设计方法论全文共83页,当前为第28页。胶水语言

由于Python

有非常简单灵活的编程方式,很多采用

C、C++等语言编写的专业库可以经过简单的接口封

装供Python

语言程序调用。这样的粘性功能使得

Python

语言成为了各类编程语言之间的接口,俗称

Python

语言为“胶水语言”。第8章程序设计方法论全文共83页,当前为第29页。计算生态

30

年前,编写程序仅能调用官方提供的API功能。

20

年前,开源运动的兴起和蓬勃发展,一批开源项目诞生

10

年前,开源运动深入开展,专业人士开始大量贡献各领域最优秀的研究和开发成果,并通过开源库形式发布出来。

那今天呢?编程领域形成了庞大的计算生态,需要一种编程语言或方式能够将不同语言、不同特点、不同使用方式的代码统一起来。第8章程序设计方法论全文共83页,当前为第30页。第三方库

Python第三方程序包括库(library)、模块(

module)、类(class)和程序包(Package)等多

种命名

统一将这些可重用代码统称为“库”。第8章程序设计方法论全文共83页,当前为第31页。第三方库

Python

内置的库称为标准库,其他库称为第三方库

在计算生态思想指导下,编写程序的起点不再是探

究每个具体算法的逻辑功能和设计,而是尽可能利用

第三方库进行代码复用,探究运用库的系统方法。第8章程序设计方法论全文共83页,当前为第32页。模块编程

这种像搭积木一样的编程方式,称为“模块编程”

每个模块可能是标准库、第三方库、用户编写的其他程序或对程序运行有帮助的资源等。第8章程序设计方法论全文共83页,当前为第33页。模块编程与模块化编程

模块编程与模块化编程不同,模块化编程主张采用

自顶向下设计思想,主要开展耦合度低的单一程序设

计与开发,而模块编程主张利用开源代码和第三方库

作为程序的部分或全部模块,搭积木一样编写程序。

10

余个各类函数库

+

20

余个实例第8章程序设计方法论全文共83页,当前为第34页。拓展:Python

构建计算生态的编程语言

——学了编程能做什么?

——你将走进信息时代的大门,能够运用信息时代的最新成果。

学了编程能做什么?似乎只能打印字符、挑战汉诺塔。这是大多数编

程语言学习预期和学习效果的鸿沟。因为绝大多数编程语言设计用于

开发专业功能,而不是用于构建计算生态第8章程序设计方法论全文共83页,当前为第35页。拓展:Python

构建计算生态的编程语言

因此,需要专业程序员经过漫长学习才能够掌握并开发有价值程序。

Python

语言却不相同,它不是其他语言的替代,而是一个真正面向计

算生态的语言。

——AlphaGo

很炫,它打败了世界上最厉害的人类围棋选手。

——AlphaGo

开源了,采用Python

语言,快去用用看看吧。第8章程序设计方法论全文共83页,当前为第36页。Python

第三方库的安装第8章程序设计方法论全文共83页,当前为第37页。第三方库的安装

第三方库需要安装后才能使用。由于Python

语言经

历了版本更迭过程,而且,第三方库由全球开发者分

布式维护,缺少统一的集中管理,因此,Python的

第三方库曾经一度制约了Python

语言的普及和发展

。随着官方pip

工具的应用,Python

第三方库的安

装变得十分容易。第8章程序设计方法论全文共83页,当前为第38页。第三方库的安装

Python

第三方库依照安装方式灵活性和难易程度有

三个方法,建议读者依次使用,能够将第三方库安装

成功。

这三个方法是:pip

工具安装、自定义安装和文件安装。第8章程序设计方法论全文共83页,当前为第39页。pip

工具安装

最常用且最高效的Python第三方库安装方式是采用pip工具安装。

pip是Python官方提供并维护的在线第三方库安装工具。

对于同时安装Python

2

和Python

3

环境的系统,

建议采用pip3

命令专门为Python

3

版本安装第三方

库。第8章程序设计方法论全文共83页,当前为第40页。pip

工具安装

pip

是Python

内置命令,需要通过命令行执行,执

行pip

-h

命令将列出pip

常用的子命令,注意,不要

在IDLE

环境下运行pip

程序。

:\>pip

-h第8章程序设计方法论全文共83页,当前为第41页。pip

工具安装第8章程序设计方法论全文共83页,当前为第42页。pip

使用

pip

支持安装(install)、下载(download)、卸

载(uninstall)、列表(list)、查看(list)、查找

(search)等一系列安装和维护子命令。

安装一个库的命令格式如下,例如:pip

install

<拟安装库名>第8章程序设计方法论全文共83页,当前为第43页。pip

使用

例如,安装pygame

库,pip

工具默认从网络上下载pygame

库安装文件并自动安装到系统中。第8章程序设计方法论全文共83页,当前为第44页。pip

使用

使用-U

标签可以更新已安装库的版本,例如,用pip

更新本身:第8章程序设计方法论全文共83页,当前为第45页。pip

使用

卸载一个库的命令格式如下,例如:pip

uninstall

<拟卸载库名>第8章程序设计方法论全文共83页,当前为第46页。pip

使用

可以通过list

子命令列出当前系统中已经安装的第三方库,例如:

pip

list第8章程序设计方法论全文共83页,当前为第47页。pip

使用

pip

的download

子命令可以下载第三方库的安装

包,但并不安装,例如:

pip

download

<拟下载库

名>第8章程序设计方法论全文共83页,当前为第48页。pip

使用

pip

的search

子命令可以链接搜索库名或摘要中关键字,例如:

pip

search

<拟查询关键字>第8章程序设计方法论全文共83页,当前为第49页。pip

使用

pip

是Python

第三方库最主要的安装方式,可以

安装超过90%以上的第三方库。然而,由于一些

历史、技术和政策等原因,还有一些第三方库无

法暂时用pip

安装,此时,需要其他的安装方法第8章程序设计方法论全文共83页,当前为第50页。pip

使用

pip

工具与操作系统也有关系,在Mac

OS

X

Linux

等操作系统中,pip

工具几乎可以安装任何

Python

第三方库,在Windows

操作系统中,有

一些第三方库仍然需要用其他方式尝试安装。第8章程序设计方法论全文共83页,当前为第51页。自定义安装

自定义安装指按照第三方库提供的步骤和方式安装。第三方库都有主页用于维护库的代码和文档。以科学计算用的numpy

为例,开发者维护的官方主页是:

/

浏览该网页找到下载链接,如下:/scipylib/download.html

进而根据指示步骤安装。自定义安装一般适合在pip

中尚无登记或安装失败的。第8章程序设计方法论全文共83页,当前为第52页。文件安装

由于Python

某些第三方库仅提供源代码,通过pip

下载文件后无法在Windows系统编译安装,会导致

第三方库安装失败。在Windows

平台下遇到的无法

安装第三方库的问题大多属于这类。第8章程序设计方法论全文共83页,当前为第53页。文件安装

为了解决这类第三方库安装问题,美国加州大学尔

湾分校提供了一个页面,帮助Python

用户获得

Windows

可直接安装的第三方库文件,链接地址如

下:

/~gohlke/pythonlibs/第8章程序设计方法论全文共83页,当前为第54页。文件安装

该地址列出了一批在pip

安装中可能出现问题的第三方库。

这里以scipy

为例说明,首先在上述页面中找到scipy

库对应的内容第8章程序设计方法论全文共83页,当前为第55页。文件安装

选择其中的.whl

文件下载,这里选择适用于Python

3.5

版本解释器和32

位系统的对应文件:scipy-

0.18.1-cp35-cp35m-win32.whl

D:\pycodes目录。第8章程序设计方法论全文共83页,当前为第56页。文件安装

然后,采用pip

命令安装该文件第8章程序设计方法论全文共83页,当前为第57页。PIL库的使用第8章程序设计方法论全文共83页,当前为第58页。

PIL库概述

PIL(Python

Image

Library)库是Python语言的第三方库,需要通过pip工具安装。:\>pip

install

pillow#

或者

pip3

install

pillow

PIL库支持图像存储、显示和处理,它能够处理几乎所有图片格式,可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。第8章程序设计方法论全文共83页,当前为第59页。PIL库概述

PIL库可以完成图像归档和图像处理两方面功能需求:图像归档:对图像进行批处理、生成图像预览、图像格式转换等;图像处理:图像基本处理、像素处理、颜色处理等。第8章程序设计方法论全文共83页,当前为第60页。

PIL库Image类解析

在PIL中,任何一个图像文件都可以用Image对象表示Image类的图像读取和创建方法。

方法

Image.open(filename)

Image.new(mode,

size,

color)Image.open(StringIO.StringIO(buffer))

Image.frombytes(mode,

size,

data)

Image.verify()

描述根据参数加载图像文件根据给定参数创建一个新的图像从字符串中获取图像根据像素点data创建图像对图像文件完整性进行检查,返回异常第8章程序设计方法论全文共83页,当前为第61页。PIL库Image类解析要加载一个图像文件,最简单的形式如下,之后所有操作对im起作用>>>from

PIL

import

Image>>>im

=

Image.open("D:\\pycodes\\birdnest.jpg")第8章程序设计方法论全文共83页,当前为第62页。PIL库Image类解析Image类有4个处理图片的常用属性

属性Image.format

Image.mode

Image.sizeImage.palette

描述标识图像格式或来源,如果图像不是从文件读取,值是None图像的色彩模式,"L"灰度图像、"RGB"真彩色图像、"CMYK"出版图像图像宽度和高度,单位是像素(px),返回值是二元元组(tuple)调色板属性,返回一个ImagePalette类型第8章程序设计方法论全文共83页,当前为第63页。

PIL库Image类解析微实例7.1:GIF文件图像提取。对一个GIF格式动态文件,提取其中各帧图像,并保存为文件。微实例7.1m7.1GifExtractor.py123456789from

PIL

import

Image#

读入一个GIF文件im

=

Image.open('pybit.gif')try:im.save('picframe{:02d}.png'.format(im.tell()))

while

True:

im.seek(im.tell()+1)im.save('picframe{:02d}.png'.format(im.tell()))except:

print("处理结束")第8章程序设计方法论全文共83页,当前为第64页。

PIL库Image类解析Image类的图像转换和保存方法如表所示。

方法Image.save(filename,

format)

Image.convert(mode)

Image.thumbnail(size)

描述将图像保存为filename文件名,format是图片格式使用不同的参数,转换图像为新的模式创建图像的缩略图,size是缩略图尺寸的二元元组第8章程序设计方法论全文共83页,当前为第65页。PIL库Image类解析生成"birdnest.jpg"图像的缩略图,其中(128,128)是缩略图的尺寸。>>>im.thumbnail((128,

128))>>>im.save("birdnestTN","JPEG")北京鸟巢图片及其缩略图第8章程序设计方法论全文共83页,当前为第66页。

PIL库Image类解析

Image类可以缩放和旋转图像,其中,rotate()方法以逆时针旋转的角度值作为参数来旋转图像。

方法

Image.resize(size)Image.rotate(angle)

描述按size大小调整图像,生成副本按angle角度旋转图像,生成副本第8章程序设计方法论全文共83页,当前为第67页。

PIL库Image类解析

Image类能够对每个像素点或者一幅RGB图像的每个通道单独进行操作,split()方法能够将RGB图像各颜色通道提取出来,merge()方法能够将各独立通道再合成一幅新的图像。

方法

Image.point(func)

Image.split()Image.merge(mode,bands)Image.blend(im1,im2,alpha)

描述根据函数func功能对每个元素进行运算,返回图像副本提取RGB图像的每个颜色通道,返回图像副本合并通道

,采用mode色彩,bands是新色的色彩通道将两幅图片im1和im2按照如下公式插值后生成新的图像:

im1

*

(1.0-alpha)

+

im2

*

alpha第8章程序设计方法论全文共83页,当前为第68页。

PIL库Image类解析

微实例7.2:图像的颜色交换。

交换图像中的颜色。可以通过分离RGB图片的三个颜色通道实现颜色交换微实例7.2m7.1ChangeRGB.py12345from

PIL

import

Imageim

=

Image.open('birdnest.jpg')r,

g,

b

=

im.split()om

=

Image.merge("RGB",

(b,

g,

r))om.save('birdnestBGR.jpg')第8章程序设计方法论全文共83页,当前为第69页。PIL库Image类解析被改变颜色的北京鸟巢图片第8章程序设计方法论全文共83页,当前为第70页。PIL库Image类解析操作图像的每个像素点需要通过函数实现,采用lambda函数和point()方法搭配使用,例子如下>>>im

=

Image.open('D:\\pycodes\\birdnest.jpg')

#打开鸟巢文件>>>r,

g,

b

=

im.split()

#获得RGB通道数据>>>newg

=

g.point(lambda

i:

i

*

0.9)

#

将G通道颜色值变为原来的0.9倍>>>newb

=

b.point(lambda

i:

i

<

100)

#

选择B通道值低于100的像素点>>>om

=

Image.merge(im.mode,

(r,

newg,

newb))

#

将3个通道合形成新图像>>>om.save('D:\\pycodes\\birdnestMerge.jpg')

#输出图片第8章程序设计方法论全文共83页,当前为第71页。PIL库Image类解析去掉光线的北京鸟巢图片第8章程序设计方法论全文共83页,当前为第72页。

图像的过滤和增强

PIL库的ImageFilter类和ImageEnhance类提供了过滤图像和增强图像的方法,共10种

方法表示

ImageFilter.BLUR

ImageFilter.CONTOUR

ImageFilter.DETAIL

ImageFilter.EDGE_ENHANCEImageFilter.EDGE_ENHANCE_MORE

ImageFilter.EMBOSS

ImageFilter.FIND_EDGES

ImageFilter.SMOOTH

ImageFilter.SMOOTH_MORE

ImageFilter.SHARPEN

描述图像的模糊效果图像的轮廓效果图像的细节效果图像的边界加强效果图像的阈值边界加强效果图像的浮雕效果图像的边界效果图像的平滑效果图像的阈值平滑效果图像的锐化效果第8章程序设计方法论全文共83页,当前为第73页。图像的过滤和增强利用Image类的filter()方法可以使用ImageFilter类,如下:Image.filter(ImageFilter.fuction)微实例7.3:图像的轮廓获取。获取图像的轮廓,北京鸟巢变得更加抽象、更具想象空间!第8章程序设计方法论全文共83页,当前为第74页。图像的过滤和增强微实例7.3m7.3GetImageContour

.py12345from

PIL

import

Imagefrom

PIL

import

ImageFilterim

=

Image.open('birdnest.jpg')om

=

im.filter(ImageFilter.CONTOUR)om.save('birdnestContour.jpg')北京鸟巢图片的轮廓效果第8章程序设计方法论全文共83页,当前为第75页。

图像的过滤和增强

ImageEnhance类提供了更高级的图像增强需求,它提供调整色彩度、亮度、对比度、锐化等功能。

方法ImageEnhance.enhance(factor)

ImageEnhance.Color(im)

ImageEnhance.Contrast(im)

ImageEnhance.Brightness(im)

ImageEnhance.Sharpness(im)

描述对选择属性的数值增强factor倍调整图像的颜色平衡调整图像的对比度调整图像的亮度调整图像的锐度第8章程序设计方法论全文共83页,当前为第76页。

图像的过滤和增强微实例7.4:图像的对比度增强。增强图像的对比度为初始的20倍。

微实例7.4

m7.4EnImageContrast.py12345from

PIL

import

Imagefrom

PIL

import

ImageEnhanceim

=

Image.open('birdnest.jpg')om

=

ImageEnhance.Contrast(im)om.enhance(20).save('birdnestEnContrast.jpg')第8章程序设计方法论全文共83页,当前为第77页。图像的过滤和增强北京鸟巢图片的20倍对比度增强效果第8章程序设计方法论全文共83页,当前为第78页。图像字符画绘制第8章程序设计方法论全文共83页,当前为第79页。

图像字符画绘制

位图图片是由不同颜色像素点组成的规则分布,如果采用字符串代替像素,图像就成为了字符画。

定义一个字符集,将这个字符集替代图像中的像素点。12ascii_char

=list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjf\

1234568795t/\|()1{}[]?-_+~<>i!;:,\"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论