《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编写一个简单的计算器程序
如何使用Python编写一个简单的计算器程序
43 0
|
1月前
|
缓存 负载均衡 安全
在Python中,如何使用多线程或多进程来提高程序的性能?
【2月更文挑战第17天】【2月更文挑战第50篇】在Python中,如何使用多线程或多进程来提高程序的性能?
|
1月前
|
索引 Python
【python基础题】——程序题(一)
【python基础题】——程序题(一)
104 1
|
2月前
|
人工智能 Java API
Python 潮流周刊#28:两种线程池、四种优化程序的方法
Python 潮流周刊#28:两种线程池、四种优化程序的方法
23 1
|
1月前
|
Linux 数据安全/隐私保护 iOS开发
python如何将程序编译成exe
python如何将程序编译成exe
32 0
|
1月前
|
存储 算法 数据处理
使用Python编写高效的数据处理程序
在当今信息爆炸的时代,数据处理变得越来越重要。本文将介绍如何使用Python语言编写高效的数据处理程序,包括利用Python内置的数据结构和函数、优化算法和并行处理等技术,帮助开发者更好地处理和分析大规模数据。
|
28天前
|
Java Python 开发者
Python 学习之路 01基础入门---【Python安装,Python程序基本组成】
线程池详解与异步任务编排使用案例-xian-cheng-chi-xiang-jie-yu-yi-bu-ren-wu-bian-pai-shi-yong-an-li
76 2
Python 学习之路 01基础入门---【Python安装,Python程序基本组成】
|
5天前
|
数据采集 JavaScript 前端开发
使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
|
6天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
14 0
|
17天前
|
安全 数据安全/隐私保护 Python
292: 程序设计C 实验五 题目三 设计密码(python)
292: 程序设计C 实验五 题目三 设计密码(python)

热门文章

最新文章