带你读《Python程序设计与问题求解(原书第2版)》之一:引言

丰富的线上&线下活动,深入探索云世界

做任务,得社区积分和周边

最真实的开发者用云体验

让每位学生受益于普惠算力

让创作激发创新

资深技术专家手把手带教

遇见技术追梦人

技术交流,直击现场

海量开发者使用工具、手册,免费下载

极速、全面、稳定、安全的开源镜像

开发手册、白皮书、案例集等实战精华

为开发者定制的Chrome浏览器插件

[美]肯尼斯·A.兰伯特(KennethA.Lambert)著刘鸣涛孙黎甘靖译

引言完成本章的学习之后,你将能够做到以下几点:●描述算法的基本特征。●解释在计算机体系结构中硬件和软件是如何协作的。●总结计算机的发展简史。●编写并运行一个简单的Python程序。

跟大多数的研究领域一样,计算机科学涉及一系列广泛的相互关联的思想。其中最基本的两个思想是算法和信息处理。本节会对这两个基本思想做简要介绍,后面的章节中会详细地介绍它们。

现在简单介绍一下现代计算机系统的结构。现代计算机系统由硬件和软件组成。硬件由执行算法所需的物理设备组成。软件是这些算法的集合,表示为程序,特别是编程语言。在接下来的讨论中,我们将重点讨论典型台式计算机系统中的硬件和软件,尽管在其他计算机系统中也可以找到类似的组件,例如手持设备和ATM(自动取款机)。

计算机的基本硬件组件是存储器、中央处理器(CPU)和一组输入/输出设备,如图1-1所示。

存储在存储器中的信息可以表示任何类型的数据,例如数字、文本、图像或声音,或者程序的指令。我们还可以在内存中存储一个编码为计算机二进制指令的算法。一旦信息被存储在内存中,我们通常想用它做点什么,也就是说,我们想处理它。负责处理数据的计算机部分是中央处理器(CPU)。这种设备有时也称为处理器,由电子开关组成,用来执行简单的逻辑、算术和控制操作。CPU通过从存储器中提取二进制指令、解码并执行它们来执行算法。执行指令可能还需要从内存中获取其他二进制信息(数据)。处理器可以非常快速地定位计算机主存储器中的数据。然而,这些数据只有在电力进入计算机时才存在。如果电源故障或关闭,主存储器中的数据将丢失。显然,需要更永久性的内存来保存数据。这种更持久的内存称为外部或辅助内存,它有几种形式。磁带和硬盘等磁存储介质允许位模式作为模式存储在磁场中。半导体存储介质(例如闪存棒)与光学存储介质(例如CD和DVD)以不同的技术实现几乎相同的功能。这些辅助存储介质中的一些可以容纳比计算机的内部存储器大得多的信息量。

■.练习

Python是一种解释语言,你可以在名为shell的交互式编程环境中运行简单的Python表达式和语句。打开Pythonshell最简单的方法是启动IDLE(集成开发环境)。这是Python安装附带的集成程序开发环境。执行此操作时,将打开一个名为PythonShell的窗口。图1-6显示了macOS上的shell窗口,在Windows系统或Linux系统上运行的shell窗口看起来应该与这个相似。请注意,此屏幕截图中出现的Python版本是3.6.1。本书假设你将使用Python3而不是Python2。这两个版本之间有很大的差异,本书中使用的许多示例不适用于Python2。

在shell窗口中包含一条打开消息,后面跟着一个特殊符号>>>,称为shell提示符。shell提示符下的光标等待你输入Python命令。请注意,通过在shell提示符下输入help或从窗口的下拉菜单中选择帮助,便可以立即获得帮助。当你输入表达式或语句时,Python会对其进行计算并显示结果(如果有的话),然后显示新的提示符。接下来的几行显示了对几个表达式和语句的求值。

注意Python代码中颜色的使用。IDLE编程环境使用颜色编码来帮助读者挑选代码中的不同元素。在这个例子中,引号内的项目是绿色的,标准函数的名称是紫色的,程序注释是红色的,IDLE对用户命令的响应是蓝色的,剩余的代码是黑色的。表1-1列出了本书所有程序代码中使用的颜色编码方案。

Pythonshell对于尝试用短表达式或语句来学习该语言的新特性以及查阅该语言的文档非常有用。要退出Pythonshell,你可以选择窗口的关闭框,或者按下Control+D组合键。本节的其余部分将探讨开发更复杂和更有趣的程序的方法。

在这个例子中,文本“Hithere”是我们希望Python显示的文本。在编程术语中,这段文字被称为字符串。在Python代码中,字符串总是用引号括起来。但是,print函数显示不带引号的字符串。你还可以编写一个打印函数,该函数包含两个或多个用逗号分隔的表达式。在这种情况下,print函数会评估表达式,并在一行中显示结果,用单个空格分隔。带有两个或更多表达式的print语句的语法如下所示:

注意这个语法示例中的省略号(...)。省略号表示你可以在第一个表达式之后包含多个表达式。无论输出一个或多个表达式,print函数总是以换行符结束其输出。换句话说,它显示表达式的值,然后将光标移动到窗口的下一行。要在与上一行相同的行上开始下一个输出,可以将表达式end="",即“用空字符串而不是换行符结束行”,放在表达式列表的末尾,如下所示:

在Python中创建程序时,你经常希望程序向用户请求输入。你可以通过使用input函数来做到这一点。此功能使程序停止并等待用户从键盘输入值。当用户按下return或enter键时,该函数接受输入值,并使其可供程序使用。以这种方式接收输入值的程序通常会将其保存以供进一步处理。下面的示例接收来自用户的输入字符串并保存它以供进一步处理。用户的输入是黑色的。

输入功能执行以下操作:●显示输入提示。在这个例子中,提示是"Enteryourname:"。●接收在键盘上输入的称为字符的击键字符串,并将该字符串返回给shell。输入函数如何知道使用什么作为提示?括号中的文本"Enteryourname:"是input函数的一个参数,它告诉input函数如何用于提示。参数是函数完成工作所需的信息。通过将函数返回的字符串分配给变量name来保存。具有输入功能的赋值语句的形式如下:

变量标识符简称变量,它只是一个值的名称。当变量在input语句中收到它的值时,变量就会引用这个值。如果用户在最后一个示例中输入了名称“KenLambert”,变量名的值如下所示:

input函数总是根据用户的击键建立一个字符串并将其返回到程序中。输入代表数字的字符串后,程序员必须将它们从字符串转换成合适的数字类型。在Python中,为此有两个类型转换函数,分别称为int(整数)和float(浮点数字)。下一个例子输入两个整数并显示它们的总和:

注意,调用int函数时,输入函数会返回每个结果。将这两个数字相加,然后输出它们的总和。表1-2总结了本节介绍的函数。

虽然在shell提示符下以交互方式尝试短Python表达式和语句很容易,但是编写、编辑和保存文件中更长、更复杂的程序更方便。然后,我们可以在IDLE中运行这些程序文件或脚本,也可以在操作系统的命令提示符下运行,而不打开IDLE。脚本文件也是Python程序分发给他人的方式。最重要的是,正如你从写学期论文中知道的,文件允许你安全和永久地保存若干小时的工作。要以这种方式编写和执行程序,请执行以下步骤:

图1-7显示了一个IDLE窗口,其中包含一个完整的脚本,提示用户输入矩形的宽度和高度,计算矩形的面积,并输出结果。

脚本当脚本从IDLE窗口运行时,它会在图1-8所示的shell窗口中产生与用户的交互。

与在Python解释器的提示下直接输入程序相比,这可能是一种互动程度稍低的执行程序的方式。但是,从IDLE窗口运行脚本将允许你构建一些复杂的程序,测试它们,并将它们保存在程序库中,以便重用或与他人共享。

无论你是将Python代码作为脚本运行还是在shell中交互运行,Python解释器都会做大量工作来执行程序中的指令。这项工作可以分成一系列步骤,如图1-9所示。

程序员在编写程序时不可避免地会犯拼写错误,Python解释器几乎总能检测到这些错误。这种错误称为语法错误。术语语法是指在语言中形成句子的规则。当Python在程序中遇到语法错误时,它会停止执行,并显示错误消息。Pythonshell的以下示例显示了几种类型的语法错误和相应的错误消息:

第一条语句为变量Length分配一个输入值。下一条语句试图打印变量Length的值。Python回应说这个名字没有定义。虽然程序员可能想写变量Length,但是Python只能读取程序员实际输入的内容。这是一个很好的例子,说明一台计算机只能读取它接收的指令,而不能读取我们打算给它的指令。下一条语句试图打印拼写正确的变量的值。但是,Python仍然会生成错误消息。

在此错误消息中,Python解释了这一行代码意外缩进。事实上,在print之前还有一个额外的空格。缩进在Python代码中非常重要。在shell提示符或脚本中输入的每一行代码必须从最左边的列开始,没有前导空格。此规则的唯一例外发生在控制语句和定义中,其中嵌套语句必须缩进一个或多个空格。你可能会认为跟踪程序中的缩进会很痛苦。然而,作为补偿,Python语言比其他编程语言简单得多。因此,要遇到和纠正的语法错误类型更少,要学习的语法也更少!在我们的最后一个例子中,程序员试图添加两个数字,但是忘记了第二个数字:

在后面的章节中,你将了解更多其他类型的程序错误以及如何修复产生这些错误的代码。■.练习

THE END
1.软件与算法简述软件程序和算法的区别和联系(3).算法代表了对问题的解,而程序则是算法在计算机上的特定的实现。一个算法若用程序设计语言来描述,则它就是一个程序. ? 算法和软件的关系,程序员应该学习哪些算法 一.基本算法: 枚举. (poj1753,poj2965) 贪心(poj1328,poj2109,poj2586) 递归和分治法. https://www.ultimate-communications.com/zh/system_418410
2.软件开发的本质,分层结构的合理性,各阶段内容与规约的简单说明模块是整个程序中相对独立的单元,每个程序单元完成与实现一个相对独立的软件功能。可以说模块就是代码,是一个封装了实现某一个功能的逻辑和数据。这样的代码需要完成的是自身功能的实现和与其它模块的交互。自身的功能实现依靠着模块内部的逻辑,即模块内部实现某功能的代码和算法。而与其它模块的交互则需要明确的接口进https://www.bilibili.com/opus/957019237522604057
3.什么是软件编程思想?Worktile社区下面是几种常见的软件编程思想: 结构化编程思想:结构化编程思想强调程序应该由一系列互相连接的代码块(称为模块)组成,每个模块都有一个明确的输入和输出。它通过使用顺序、选择和循环结构来组织代码,使之更易于阅读、理解和维护。 面向对象编程思想:面向对象编程思想将程序看作是一组相互作用的对象的集合。每个对象都https://worktile.com/kb/ask/2035320.html
4.算法是程序的灵魂,让我们从基椽始算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发。软件开发工作不是按部就班,而是选择一种最合理的算法去实现项目功能。算法能够引导开发者在面对一个项目功能时用什么思路去实现,有了这个思路后,编程工作只需要遵循这个思路去实现即可。本章将详细讲解计算机算法的基础知识,为读者步入后面的学习打下基础。 https://labs.epubit.com/articleDetails?id=NNb6e4b6e6-a18f-4e6d-9cfe-4d2b7a3962f1
5.计算思维的基础概念及其在编程中的应用2. 计算思维在编程中的基本原理 计算思维是指通过对问题进行分解、抽象、模式识别和算法设计来解决问题的思维方式。在编程中,计算思维是至关重要的,它帮助程序员更好地理解和解决问题,提高代码的效率和质量。 2.1 算法与逻辑思维 算法是解决问题的步骤和方法的描述,是计算思维的核心。通过学习和应用不同的算法,可以https://wenku.csdn.net/column/4n9rgtk1dd
6.朱娜斐编译原理复习笔记北京工业大学软件学院所谓“LL(1)”,是指:从左(L)向右读入程序,最左(L)推导,采用 1 个前看符号。分析高效,也是线性时间复杂度。 其基本思想是 —— 表驱动的算法,如下图。 LL(1)分析表 第一列都是非终结符,第一行都是终结符,行列交叉点表示对应的产生式序号(注意要是在非终止符及其FIRST集中的元素的交叉点填写)。 https://www.jianshu.com/p/f25c1315af34
7.软件工程专业培养方案(2022)(四)人才培养基本要求 (1)知识要求 1.人文社会科学知识。掌握文学、历史学、哲学、伦理学、政治学、艺术、心理学等知识。 2.数学与自然科学知识。掌握从事软件工程专业所需的高等数学、概率和数理统计、物理、电路等数学与自然科学知识。 3.专业技术基础知识。程序设计、算法与数据结构、数据库原理与技术、操作系统https://www.csust.edu.cn/jtxy/info/1302/20908.htm
8.非对称加密算法在软件版权保护中的应用RSA采用一对密钥,即公钥和私钥,从公钥难于推出私钥,反之亦然,这个难度是基于大数分解的难度。本文重点在于设计一种注册算法来保护软件版权,RSA加密算法的详细过程参考其它资料。[1] 2.2基本思想 首先生成一对RSA随机公钥E和私钥D,这里采用RSATool()生成64-bitRSA的参数,例如:大素数P=D53F26F3,大素数Q=F05C1DEBhttps://www.66law.cn/laws/65476.aspx
9.免费vc中国象棋软件(一)程序的基本框架: 从程序的结构上讲,大体上可以将引擎部分划分为四大块: 棋局表示; 着法生成; 搜索算法; 局面评估。 程序的大概的思想是: 首先使用一个数据结构来描述棋局信息,对某一特定的棋局信息由着法生成器生成当前下棋方所有合法的着法并依次存入着法队列。然后通过搜索算法来逐一读取着法并调用局面评估函数https://www.yjbys.com/biyelunwen/fanwen/jisuanji/369071.html
10.处理器管理处理器的两种状态用程序状态字寄存器PSW中的某标志位软件中断 硬件中断,如缺页 软件中断,整数除0 外中断 信号来源:cpu外部与当前执行的指令无关 外设请求,如IO操作完成发出中断信号 人工干预,如用户强行终止一个进程 进程 引入多道程序技术之后,内存中同时放入多道程序,各个程序的代码、运算数据存放的位置不同。os要怎么才能找到各程序的存放位置? https://juejin.cn/post/7045640928962281485
11.计算机算法学习笔记在用计算机解决实际问题时,常常要先设计算法,再用某种程序设计语言来实现算法(即编程)。因此,算法的设计的好坏会直接影响程序执行效率的高低,可以说算法是程序的思想和灵魂。 2特征 输入: 输出: 有穷性:一个算法必须能在执行有限个步骤之后终止。 确切性:一个算法的每个步骤都必须有确切的定义,可以严格地,无歧义https://www.zhihu.com/tardis/bd/art/338947234
12.2022考研计算机软件工程教程51CTO博客软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据以及相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。 软件是一种逻辑产品 https://blog.51cto.com/u_16106623/6262891
13.计算机基础知识1.1算法 算法:是指解题方案准确而完整的描述。 算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。 算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。 特征包括: (1)可行性; https://www.oh100.com/kaoshi/yingjian/321869.html
14.软件设计师考点七:数据结构与算法基础软件设计师摘要:2019年软件设计师考试已经进入冲刺阶段,希赛网软考频道小编为大家整理了软件设计师知识点,以下为软件设计师知识点七:数据结构与算法基础。 第7章:数据结构与算法基础 【知识点梳理】 知识点1、数组与矩阵(★★) 【考法分析】 1、本知识点的考查形式主要有:给定一些数组或矩阵,计算对应某个元素的存放位置或https://www.educity.cn/rk/1970488.html
15.单片机原理及应用教程第4版第1章单片机应用基础概述在线免费本节在计算机硬件经典结构的基础上,介绍了计算机和单片机的基本概念及常用单片机系列类型。 1.1.1 计算机到单片机的发展过程 1.冯·诺依曼计算机 1945年6月发表的关于EDVAC的报告草案中,提出了以“二进制存储信息”和“存储程序(自动执行程序)”为基础的计算机结构思想,即冯·诺依曼结构。按照冯·诺依曼结构思想,进一步https://fanqienovel.com/reader/7110144623195982860
16.计算机基础知识教案(精选13篇)计算机其实由软件和硬件构成,硬件是可以看到的',是物质基础,软件则是它的思想灵魂。 计算机软件大体上可以分为系统软件和应用软件两大类。 (1)系统软件 系统软件是一种综合管理计算机硬件和软件资源,为用户提供工作环境和开发工具的大型软件。系统软件主要有操作系统和程序设计语言两类。 http://www.jiaoyubaba.com/jiaoan/84181.html
17.大学信息技术素养(普通高等院校计算机基础教育十四五规划教材)5.2 Python程序设计基础 5.2.1 Python的基本语法 5.2.2 对象、值与类型 5.2.3 运算符 5.2.4 流程控制 5.2.5 函数的定义和调用 5.2.6 模块 5.2.7 类与对象 5.2.8 软件生命周期 5.3 算法的概念与描述 5.3.1 算法的概念及特征 5.3.2 数据结构 5.3.3 常用算法 5.3.4 基本算法思想 https://www.yuntaigo.com/book.action?recordid=bmFsaG9ua2M5Nzg3MTEzMjgzNDc2
18.计算机软件理论(精选十篇)2 大学文科计算机软件理论知识教学对策 2.1 由浅入深教学方法 教师在授课的过程中应当将学生的认知规律掌握好。在程序设计语言课程教学的过程中, 会遇到一个普遍的问题, 那就是选择什么入手点:是语法规则, 还是具体的问题。经研究实践证明, 可以具体问题作为切入点。先引出相关的语法规则, 然后在利用其他方法, 让学https://www.360wenmi.com/f/cnkey7of608u.html
19.计算机软件与理论10篇(全文)(2)水压模型和计算机疏散模拟均可以用于地下建筑人员疏散时间的预测。两种方法所得到的疏散时间基本相吻合,误差仅为8.5 s。数值模拟结果较理论计算稍微保守。 软件项目管理的理论与实践 第2篇 摘要:本文在探讨CMM/CMMI、敏捷编程等相关理论的基础上,结合软件开发实践,提出了平衡敏捷与纪律的软件管理思想,并探讨了融合https://www.99xueshu.com/w/ikey70233crg.html
20.关于印发《2023年甘肃省普通高校高职(专科)升本科统一考试招生3.演示文稿软件的功能和使用 (1)中文PowerPoint 的基本功能和使用。 (2)中文PowerPoint 的基本操作。 (3)幻灯片外观的设置与放映。 (五)程序设计能力 1.程序和程序设计语言的基本概念。 2.掌握算法的基本概念及表示。 3.掌握程序设计的基本步骤和方法。 https://www.ganseea.cn/putongzhuanshengben/621.html
21.用画程软件颠覆传统编程教学.pdf无论用纸笔、粉笔还是用 WORD、VISIO 等 软件画程序框图,都费时费力!⑵好不容易画出程序框图后,再怎么转化为程 序?由于先学程序框图,学生还不会写代码,因此无力写出代码验证算法。如 果先学算法语句,学会编写程序代码,则又淡化了算法思想的主导作用,违背 2 了高中数学算法教学的初衷:重在理解算法思想,不要上https://m.book118.com/html/2021/1104/5221210324004100.shtm