《Python程序设计》——1.3 编程工具

简介:

本节书摘来自华章计算机《Python程序设计》一书中的第1章,第1.3节,作者:[美]戴维 I.施奈德(David I. Schneider)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.3 编程工具

本节讨论一些特殊的算法,并描述三个用于将算法转化为计算机程序的工具:流程图、伪代码和层次结构图。
你每天都使用算法进行决策以及执行任务。例如,当你寄信时,你必须决定在信封上贴几张邮票。一个经验法则是,每五页或不足五页信纸使用一张邮票。假如一个朋友让你决定在信封上贴几张邮票,下面的算法将完成此任务:

  1. 获取信纸的页数,称其为Sheets。 (输入)
  2. 将Sheets除以5。 (处理)
  3. 如果需要,将商向上取整,称其为Stamps。 (处理)
  4. 返回Stamps数目。 (输出)
    上述算法将信纸的数目(Sheets)作为输入,处理此数据,产生所需邮票的数目(Stamps)作为输出。我们可以用有16页信纸的信测试此算法。
  5. 获取信纸的页数,Sheets = 16。
  6. 将16除以5,得到3.2。
  7. 3.2向上取整得4,Stamps = 4。
  8. 返回答案,4张邮票。
    此问题求解的例子如图1-3所示。


screenshot


三种流行的程序设计工具如下。
流程图:图形化地描述完成一项任务所需的逻辑步骤,并且展示各个步骤之间的关系。
伪代码:使用类似英语的短语以及一些Python语句概述一项任务。
层次图:展示程序不同部分之间的关系。
1.3.1 流程图
流程图由通过箭头连接的特殊几何符号构成。在每个符号内部,是描述该步动作的一个短语。符号的形状指明待发生的操作的类型。例如,平行四边形表示输入或输出。连接几何符号的箭头称作流程线(flowline),展示了步骤的进程。流程图应该从上“流”到下。虽然流程图中使用的符号是规范化的,但是每个符号的更多细节并没有什么标准。

screenshot
screenshot

流程图符号表已经被美国国家标准协会(ANSI)所采纳。图1-4展示了邮资问题的流程图。

screenshot


使用流程图来制定计划的主要好处是,其提供了任务的一个图形化表示,因此使得逻辑更容易理解。我们可以清晰地看到每个步骤以及步骤之间是如何连接的。主要不足是当一个程序非常大的时候,流程图可能需要画在多页上,使得他们很难阅读和修改。
1.3.2 伪代码
伪代码是实际计算机代码的英文简化版本。在流程图中使用的几何符号被类似英语的语句所替代,它们概述了整个过程。结果就是,伪代码比流程图更像计算机代码。伪代码使得程序员能够专注于解决问题的步骤,而不是如何使用计算机语言。程序员能够使用类Python的形式描述算法,而不用为Python规则所限。当伪代码完成时,它们能够很容易地翻译为Python语言。
邮资问题的伪代码如图1-5所示。

screenshot


伪代码有几个好处。它很紧凑,可能不会向流程图一样连续许多页。伪代码也看起来很像真实的代码,因此为许多程序员所偏爱。
1.3.3 层次结构图
我们将讨论的最后一个编程工具是层次结构图(Hierarchy Chart),其展示了程序结构的全貌。层次结构图也称作结构图、HIPO(Hierarchy plus Input-Process-Output)图、自顶向下图、VTOC(Visual Table of Contents)图。所有这些名字都指类似于公司组织结构图那样的规划图。
层次结构图描绘了程序的组织框架,而不关心具体的处理逻辑。它描述了程序的每一个部分在做什么,并且描述了程序的一个部分和其他部分之间的关系。然而,忽略了程序内部的处理细节。我们应该按照从上至下、从左至右的顺序来阅读层次结构图。程序的一个部分可能被划分成几个子部分,在图中以分支的形式来描述。通常,当一个部分的子部分的工作都执行完毕后,下一个待执行的部分是这个部分右面的那个部分。我们可以通过层次结构图,很快地了解到程序分为几个部分,当前执行到哪一个部分。图1-6展示了邮资问题的层次结构图。

screenshot


层次结构图最主要的作用是用来做程序的初期规划。一旦我们划分出程序的主要部分,我们就可以知道在总体上需要做什么。接着,在此基础上,我们再进一步将每个部分用流程图或者伪代码细化。这个过程就是所谓的分治(divide-and-conquer)法。
1.3.4 判断结构
为了解决邮资问题,我们设计了一系列指令来获取数据、执行运算、显示结果。其中每一个步骤都是按顺序执行的,也就是说,我们一行接着一行执行指令,并不跳过任何一行。这种结构叫作顺序结构(sequence structure)。然而,许多问题需要判断,来决定是否要执行一部分指令。如果判断的结果为“是”,则一部分指令需要执行;如果判断的结果为“否”,则执行另外一部分指令。这种结构称为判断结构(decision structure)。图1-7描述了一个判断结构的伪代码和流程图。
顺序结构和判断结构都会应用于解决接下来的问题。

screenshot


1.3.5 判断纽约接数字编号街道方向的算法
问题:给定一个纽约单行道的街道编号,给出该条单行道的方向,是东行还是西行。
讨论:根据纽约单行道的街道编号来获知该条单行道的方向,有一条简单的规则:双数编号的街道是东行的。
输入:街道编号。
处理:判断街道编号是否能被2整除。
输出:“东行”或“西行”。
图1-8到图1-10展示了此问题的流程图、伪代码和层次结构图。

screenshot


screenshot


1.3.6 循环结构
重复执行指令的程序结构称为循环结构(repetition structure, loop structure)。在一个循环结构中,需要一个条件(或测试)来决定其何时终止循环。没有退出条件的话,循环将无止尽重复(无限循环)。控制循环重复次数(通常称为迭代次数)的一种方法,是在每一遍循环开始之前检查循环条件,如果循环条件为真,则继续执行循环。如图1-11所示。在下一个程序中,需要利用循环结构。

screenshot


1.3.7 班级平均成绩算法
问题:计算并显示班级的平均成绩。
讨论:平均成绩等于班级所有学生的所有成绩之和除以学生的人数。我们需要一个循环来获取班级中每个同学的成绩并求和(累加)。在循环体内,我们同时需要计算班级学生的总数(计数)。如图1-12至图1-14所示。
输入:多个学生成绩。
处理:计算成绩总和,统计学生人数,计算班级学生的平均成绩:总成绩 / 学生人数。
输出:平均成绩。
注释

  1. 追踪一个流程图就如同在玩一个桌上游戏。我们首先以“开始”符号为起点,在符号和符号之间移动,直到到达“结束”符号。在任意一个时刻,我们只会处在一个符号上。在桌上游戏中,我们走的路线由所投掷的骰子的点数决定。而在流程图中,路线由输入决定。
  2. 算法在被写成代码之前,首先需要在流程图阶段进行测试。需要构造不同的测试数据作为输入,并检查输出。这个过程称为手工检查(desk checking)。测试数据既要包括规范数据,也要包括非规范数据。

screenshot
screenshot



screenshot

  1. 流程图、伪代码和层次结构图,是解决问题的通用工具。不仅仅是Python,它们可以用于以许多计算机编程语言为实现方式规划程序。
  2. 流程图的绘制是非常耗费时间的,并且也不容易更新。因此,专业程序员更喜欢使用伪代码和层次结构图。不过因为流程图能够非常清晰地展示程序的逻辑流程,所以它是编程教学中非常重要的工具。
  3. 伪代码的书写风格很多样。一些程序员使用纲要形式的伪代码风格,也有一些程序员使用非常类似具体编程语言的伪代码风格。一些Python的关键字,例如“if”、“else”、“while”在伪代码中广泛使用。
相关文章
|
1月前
|
Python
Python的第一个程序
【4月更文挑战第8天】Python的第一个程序
35 6
|
1天前
|
Python
【Python进阶(二)】——程序调试方法
【Python进阶(二)】——程序调试方法
|
1天前
|
Python
Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。
Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。在函数内部修改全局变量需用`global`关键字声明,否则会创建新局部变量。
9 2
|
5天前
|
消息中间件 程序员 调度
Python并发编程:利用多线程提升程序性能
本文探讨了Python中的并发编程技术,重点介绍了如何利用多线程提升程序性能。通过分析多线程的原理和实现方式,以及线程间的通信和同步方法,读者可以了解如何在Python中编写高效的并发程序,提升程序的执行效率和响应速度。
|
5天前
|
缓存 Shell 开发工具
[oeasy]python0016_在vim中直接运行python程序
在 Vim 编辑器中,可以通过`:!`命令来执行外部程序,例如`:!python3 oeasy.py`来运行Python程序。如果想在不退出Vim的情况下运行当前编辑的Python文件,可以使用`%`符号代表当前文件名,所以`:!python3 %`同样能运行程序。此外,可以使用`|`符号连续执行命令,例如`:w|!python3 %`会先保存文件(`w`)然后运行Python程序。这样,就可以在不离开Vim的情况下完成编辑、保存和运行Python程序的流程。
16 0
|
6天前
|
监控 开发者 Python
Python中记录程序报错信息的实践指南
Python中记录程序报错信息的实践指南
13 1
|
10天前
|
监控 测试技术 持续交付
Python自动化测试代理程序可用性
总之,通过编写测试用例、自动化测试和设置监控系统,您可以确保Python自动化测试代理程序的可用性,并及时发现和解决问题。这有助于提供更可靠和高性能的代理服务。
14 4
|
12天前
|
Python
简单的 Python 计算器程序
这是一个简单的Python计算器程序,实现了加、减、乘、除功能。用户选择运算类型及输入两个数字后,程序依据选择调用相应函数进行计算并显示结果。若输入非法,程序显示错误信息。
37 3
|
15天前
|
监控 测试技术 API
Python Web应用程序构建
【4月更文挑战第11天】Python Web开发涉及多种框架,如Django、Flask和FastAPI,选择合适框架是成功的关键。示例展示了使用Flask创建简单Web应用,以及如何使用ORM(如SQLAlchemy)管理数据库。
32 4
|
17天前
|
人工智能 数据库 开发者
Python中的atexit模块:优雅地处理程序退出
Python中的atexit模块:优雅地处理程序退出
12 3