从问题到程序——用Python学编程和计算
作者 : 裘宗燕
出版日期 : 2017-06-07
ISBN : 978-7-111-56445-4
定价 : 59.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 460
开本 : 16
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书以从问题到程序的宗旨组织内容,阐述了如何以Python为平台设计程序。书中既包括Python语言的基本知识,更重要的是介绍了如何解决实际问题的思想和方法。

图书前言

计算机诞生至今不过六七十年,但它已经改变了世界,改变了每个人的生活。人们每天都在与计算机交流(如智能手机),各领域专业人员的大量日常工作都需要使用计算机,从事与计算机相关工作的人们已经发展为社会上最大的专业技术社团。计算机的研究和应用、互联网和其他相关领域,还在不断呼唤大量熟悉计算机的专业开发人才。计算机科学技术的开发和应用能力已被广泛认为是国家竞争力的重要组成部分。因此,学习计算机科学技术知识,不仅是社会发展的需要,而且已成为个人的重要职业竞争力。然而,要深入理解计算和计算机,使其成为得心应手的工具,就必须学习编程。
  近年来,Python语言的良好特征已经得到学界和业界的广泛认可,被世界上许多知名大学选作计算机科学教育的第一门语言,也被很多企业和实际项目作为开发语言。这些发展情况,使越来越多的人有了学习Python的兴趣和需要。
  本书源自作者讲授基于Python的编程课程的经验,又经过认真整理,目标是提供一条清晰易行的学习路径。本书的结构和内容力图反映编程的本质,可以作为高校计算机基础课程教材,也适合希望学习Python语言和编程技术的读者阅读和参考。本书书名反映了作者对编程的基本认识:编程是从要解决的问题开始,最终得到解决问题的程序的过程。要学好编程,就要努力去理解这个过程,还必须反复实践。
  编程就是为了指挥计算机(而不是我们自己),通过一个自动计算过程(而不是人的操作)去解决问题。为了指挥计算机工作,我们需要理解计算机,理解计算过程,理解指挥计算机完成计算的途径和方法。还需要一种计算机能处理的表达方式,也就是编程语言(或称程序设计语言,本书中用Python),用于说明计算机应该怎样工作。
  程序是人写出的一段文字,表达的是要求计算机完成的一个计算过程。完成编程工作需要多方面的理解。首先需要理解面对的问题:它究竟是什么、要求做什么、可能用什么方法和计算过程去解决?要理解自己写出的程序,理解它描述的计算过程。最后的理解也非常重要:理解两者之间的关系,即自己的程序是否正确解决了相应的问题?没有对问题和程序的深入思考和理解,就不可能开发出好的、功能正确的程序。
  学习编程时必须关注两方面的问题:如何从一个解决问题的需求出发,逐步开发出一个计算过程;如何使用编程语言(如Python)正确地写出解决问题的程序,描述(实现)这个计算过程。本书的做法是提出一个个问题,从简单到复杂,讨论从它们出发的程序开发过程:分析问题的细节,设法将其严格化,提出可能的解决方案,再经分解和设计,以及随后的编码和调试,最终开发出一个程序。完成了一个程序,常常不是工作的结束,还需要回过头去考察这个程序,分析其优点和缺点,研究改进或变化的可能性。这样的程序开发过程和其中的分析、思考、选择、决策等,反映了编程工作的本质和正确工作方法。当然,考虑到读者的经验积累,较前章节中的讨论包含了更多细节,后面逐渐简化,可能只关注工作中的一些要点。但是实际上,对任何一个问题,无论简单或复杂,上述的思考和工作过程都会再一次重复。只不过随着读者的经验积累,一些问题的分析和决策变得愈发自然顺畅,以至于其明显性逐步减弱。这种趋势也反映了读者的进步。
  在阅读本书的过程中,建议读者去亲身体验程序的开发过程:看到一个问题之后,最好先不去看书中的分析和解决方法,而是自己思考,设法解决这个问题,完成之后再与书中的做法比较。如果两种做法不同,就应该分析它们各自的长处和短处。采用这样的方法学习本书(和编程),读者将不再是被动的接受者,而是主动参与者。
  实际上,对每个问题,都可能有很多(理论上是无穷多)不同解决方法,对不同方法和设计的比较、选择和决策,也是编程工作中最重要的内容。对一个具体问题,总可能做出很多正确程序。如果问题稍微复杂,常能做出一组程序,其中任何一个都不比别的程序“更好”。这些情况说明,在编程学习中,并没有必须背诵的标准答案。当然,另一方面,作者也希望通过书中实例,反映良好的编程工作和好程序的特征。书中程序都由作者开发(其间也参考了许多材料),并经过仔细修改和运行试验。程序的格式符合Python社团的考虑,结构良好,实现方法清晰简洁,可以作为读者参考的范例。
  编程语言是编程的工具,也是人与计算机交流的工具。它既要反映思维的特点,使人易于使用,也要反映计算机的特点,使计算机能按它写出的程序高效工作。Python被广泛认为是一种比较适合初学者的语言,其设计较好地反映了计算机和编程的性质和特点,具有比较平滑的学习曲线。最简单的Python程序可以看作数学和算术的自然延续,可以方便地运行,立刻看到结果(或效果)。初学者可以从这里开始一步步深入,在解决越来越复杂的问题的过程中,逐渐领悟编程和计算的性质和本质。另一方面,Python也支持许多高级编程概念,从高阶函数、生成器函数,到复杂数据对象的描述式、面向对象的编程等,反映了现代编程技术和需求的发展。本书中详细介绍了这些机制和技术,最后还介绍了两个重要的、有很强实际意义的编程问题:图形用户界面编程和并发编程。由于Python既容易入门又支持许多高级编程概念,因此是学习编程和计算的很好选择。
  本书的主要特点有:首先是包含了对许多问题的深入讨论,既有针对具体编程问题的讨论,也有结合具体问题而展开的一般性讨论。具体到编程和Python语言,本书通过实例介绍了大量重要的概念和技术,其中有些专门针对Python语言,更多概念和技术具有一般性。书中还介绍了Python语言的一些重要细节和工作原理,以帮助读者深入理解Python程序,在编程中做出正确的设计选择。
  本书包含八章和若干附录,下面简单介绍它们的情况:
  第1章介绍一些基本情况。这里主要讨论计算机和程序的关系,程序设计的基本问题,Python语言的历史、现状和应用情况,还概述了基本的程序开发过程。
  第2章是计算和编程入门。这一章首先介绍简单的数值表达式的描述和求值、类型的概念和意义、数学函数包的使用、字符串的概念和基本运算。然后讨论变量和赋值、顺序计算的脚本程序、条件控制(if语句)、重复计算和循环(for和while语句),最后讨论了函数的概念、意义,以及基本的函数定义技术。
  第3章集中讨论基本的编程技术。其中首先讨论循环的开发和实现、输入控制的循环等,然后介绍函数定义的递归方法、递归和循环的关系,最后集中讨论定义函数的思路和技术。这一章还介绍了一些与所有程序都有关的重要概念和问题,包括程序运行时间和计时、程序中的断言、循环不变式、程序正确性问题、程序的终止性等。
  第4章讨论Python函数定义、程序结构和编程中的调试问题。这里首先介绍与程序的结构和行为有关的一些基本问题,包括作用域、状态和环境的概念,程序执行中环境和状态的变化,模块的执行和导入等。然后介绍Python函数定义的结构、函数的执行和Python丰富的函数参数机制,并介绍了以函数为参数的高阶函数、lambda表达式等。最后集中讨论程序的测试和调试,以及IDLE支持程序调试的功能。
  第5章讨论复杂数据的组织和Python的组合数据类型。这里首先讨论了表、元组、字符串及其在程序中的使用,然后从序列的概念出发,统一地介绍了序列的构造技术和各种序列操作。随后介绍了字典和集合,以及这两种组合类型在程序中的应用。这一章还讨论了对象的变动性问题,介绍了字符串的格式化功能,详细解释了逻辑判断和逻辑表达式的求值过程,并对Python函数的参数问题做了总结。
  第6章介绍一些深入的编程技术。这里首先讨论文件的概念和文件使用技术,并介绍了两种重要的函数技术:生成器函数和闭包。然后讨论错误处理问题和Python处理异常的结构。最后介绍了数据持久性问题,以及Python标准库支持持久性的pickle包。
  第7章集中讨论面向对象的编程和Python的相关机制。这里首先介绍了类和对象的概念,类定义的基本技术和基于类的程序开发。然后讨论了类继承和派生类的定义,以及多继承问题等。这一章的最后介绍了Python的特殊方法名,以及利用它们模拟容器、迭代器、上下文管理器等的技术,还介绍了with语句的意义和应用。
  第8章讨论两个重要的编程问题。首先介绍图形用户界面(GUI)编程的问题,以及基于标准库包tkinter的GUI编程技术。然后介绍并发编程的问题,以及基于标准库包threading的并发编程。这两部分都包含许多实例,还说明了在实际应用开发中使用这些技术时需要解决的一些问题和处理方法。
  本书的附录包括Python语言速查手册、标准函数表、书中使用的几个标准库包的简单介绍,以及IDLE开发环境的命令简介。
  本书各章后附有很多习题,供使用本书开设课程的教师和自学的读者参考。某些章的最后有一节 “补充材料”,其中介绍一些与该章内容有关但比较具体或初学阶段不常用的Python语言机制,有时还总结了该章中讨论的一些编程技术。有几章中的若干节被标以星号,它们或者是技术性较强,或者内容涉及较深入的问题,作为基础课程的教学或者自学者初学时,可以跳过这些部分,留待课下或以后阅读。
  作者在北京大学数学学院讲授相关课程时,与参加学习的同学有很多讨论,这些讨论帮助作者澄清了很多重要问题。参与课程辅导工作的胡婷婷和陈晨以及刘海洋,都提出了一些很好的建议。在本书的成书过程中,机械工业出版社的朱劼编辑非常认真,提出了很多改进意见。对所有这些帮助,作者在此一并表示衷心感谢。最后,作者希望得到读者的意见和反馈,并先在这里表示感谢。
  
裘宗燕
2017年3月

上架指导

计算机\程序设计

作者简介

裘宗燕:
裘宗燕: 北京大学数学学院信息科学系教授。长期从事计算机软件与理论、程序设计语言和符号计算方面的研究和教学工作。已出版多部著作和译著,包括《程序设计语言基础》(译著,北京大学出版社,1990),《Mathematica数学软件系统的应用与程序设计》(编著,北京大学出版社,1994),《计算概论(上)》(合著,高等教育出版社,1997),《从问题到程序—程序设计与C语言引论》(编著,北京大学出版社,1999)等;自2000年以来,他先后为机械工业出版社华章分社翻译了《程序设计实践》(2000),《C++程序设计语言(特别版)》(2001),《C++语言的设计和演化》(2002),《程序设计语言——概念和结构》(2002),《从规范出发的程序设计》(2003),《计算机程序的构造和解释》(2004)等一系列经典著作,他认真的工作作风、严谨的治学态度,以及所做出的巨大贡献,赢得广大读者的好评。 在北京大学教授的主要课程:计算概论(一年级本科生,主要内容为C语言程序设计),程序设计技术与方法(本科生),程序设计语言原理(研究生),算法和数据结构(本科生),算法设计与分析(本科生和研究生),数理逻辑(本科生)等。 点击进入[URL=http://www.math.pku.edu.cn/teachers/qiuzy/]作者主页[/URL]。

图书目录

前言
第1章 程序设计和Python 1
1.1 计算机和程序 1
1.1.1 “是什么”和“怎样做”的知识 1
1.1.2 计算和程序 3
1.1.3 编程语言 7
1.2 Python语言简介 10
1.2.1 Python语言的发展和应用 10
1.2.2 Python系统和IDLE编程环境 13
1.3 程序开发 15
1.3.1 程序开发过程 15
1.3.2 程序错误 16
1.3.3 从问题到程序 19
练习 22
第2章 计算和编程初步 23
2.1 数值表达式和算术 23
2.1.1 整数计算 23
2.1.2 浮点数和复数 27
2.2 数据对象、计算和类型 29
2.2.1 对象和类型 29
2.2.2 混合类型计算和类型转换 30
2.2.3 数值类型和计算的简单总结 31
2.3 内置函数和数学函数包 32
2.3.1 函数及其使用 33
2.3.2 处理数值的内置函数 33
2.3.3 数学函数包 34
2.4 字符串 35
2.4.1 字符串和字符串类型 35
2.4.2 字符串操作 36
2.5 标识符、变量和赋值 38
2.5.1 变量、名字和值 38
2.5.2 简单顺序计算 40
2.6 简单脚本程序 41
2.6.1 脚本的编辑和执行 41
2.6.2 程序和输入 43
2.7 判断和条件控制 45
2.7.1 条件判断和逻辑表达式 45
2.7.2 if语句(条件语句) 46
2.7.3 编程实例 48
2.8 重复计算和循环 49
2.8.1 重复计算 50
2.8.2 for语句和重复计算 51
2.8.3 while语句和迭代 53
2.8.4 循环控制 56
2.9 计算的抽象和函数 56
2.9.1 计算的控制和抽象 56
2.9.2 计算的抽象:函数 57
2.9.3 函数定义和使用实例 60
2.10 若干Python机制及其他 62
2.10.1 已讨论的Python机制 62
2.10.2 若干Python机制 62
2.10.3 Python解释器 64
2.11 补充材料 64
2.11.1 语言细节 65
2.11.2 编程技术 70
练习 71
第3章 基本编程技术 77
3.1 循环程序设计 77
3.1.1 循环的需求和问题 78
3.1.2 常见循环形式 80
3.1.3 输入循环 86
3.2 递归 89
3.2.1 递归定义的函数 89
3.2.2 乘幂的计算 90
3.2.3 循环和递归 91
3.2.4 斐波那契数列的计算 92
3.2.5 最大公约数 97
3.2.6 不容易用循环求解的递归问题 100
3.2.7 更复杂的递归情况 103
3.3 程序终止性 103
3.3.1 调和级数的部分和 104
3.3.2 程序终止性不可判定 104
3.4 定义函数 105
3.4.1 为什么定义函数 105
3.4.2 学习定义函数 108
3.4.3 函数:两种观点及其联系 111
3.4.4 通用和专用的方法 117
练习 120
第4章 函数和程序结构 124
4.1 作用域、环境和状态 124
4.1.1 作用域与函数定义 124
4.1.2 环境和状态 126
4.1.3 程序执行中的环境变化 129
4.1.4 模块和环境 133
4.2 函数定义和函数调用 135
4.2.1 函数定义的结构 135
4.2.2 函数调用中的问题 140
4.2.3 带默认值形参和关键字实参 143
4.3 编程框架和高阶函数 145
4.3.1 编程框架和函数的函数参数 145
4.3.2 匿名函数和lambda表达式 149
4.3.3 随机数和模拟 153
4.3.4 高阶函数 155
4.4 程序的测试和调试 156
4.4.1 测试 157
4.4.2 排除程序里的错误 162
4.4.3 使用IDLE的调试功能 163
4.4.4 程序测试问题 165
4.5 补充材料 166
4.5.1 语言细节 166
4.5.2 编程技术和规则 169
练习 169
第5章 数据的组织和操作 172
5.1 组合数据对象 172
5.2 表 173
5.2.1 简介 174
5.2.2 表的构造和操作 175
5.2.3 编程实例 178
5.3 元组 183
5.3.1 基础 183
5.3.2 有理数程序包 185
5.3.3 打包和拆分 187
5.4 序列、不变对象和可变对象 189
5.4.1 序列和序列操作 189
5.4.2 描述式 194
5.4.3 对象、变动和变量关联 196
5.4.4 一些程序实例 202
5.4.5 表处理 204
5.5 字符串及其格式化生成 209
5.5.1 字符串操作 209
5.5.2 字符串的格式化 213
5.5.3 一个简单的交互式计算器 216
5.6 字典 217
5.6.1 概念和操作 218
5.6.2 字典与函数参数 221
5.6.3 字典的应用实例 222
5.7 集合 224
5.7.1 概念和操作 224
5.7.2 集合操作 226
5.8 程序实例 228
5.8.1 多项式计算 228
5.8.2 另一个筛法实例 231
5.9 若干语言和技术问题 232
5.9.1 逻辑类型和逻辑判断 232
5.9.2 函数参数的总结 235
5.10 补充材料 236
5.10.1 语言细节 236
5.10.2 编程技术 240
练习 241
第6章 高级编程技术 248
6.1 文件:使用外存数据 248
6.1.1 文件和输入/输出 249
6.1.2 Python的文件功能 251
6.1.3 文件处理程序实例 256
6.2 生成器函数和闭包 261
6.2.1 生成器函数 261
6.2.2 闭包和装饰器 265
6.2.3 编程实例 274
6.3 异常和异常处理 276
6.3.1 运行中的错误 277
6.3.2 异常和异常处理 279
6.3.3 异常处理的结构和技术 282
6.3.4 try结构和raise语句详述 284
6.3.5 预定义异常 287
6.3.6 用异常作为控制机制 288
6.4 数据处理和持久性 291
6.4.1 文本生成 291
6.4.2 数据记录和信息管理 295
6.4.3 数据持久性 300
6.4.4 with语句 302
6.5 Python程序的几个问题 304
6.5.1 Python程序及其运行 304
6.5.2 程序格式 307
6.5.3 怎样阅读Python手册 308
6.6 补充材料 309
6.6.1 语言细节 309
6.6.2 编程技术 313
练习 315
第7章 数据抽象和面向对象编程 320
7.1 数据抽象、类和自定义类型 320
7.1.1 类型和数据组合 321
7.1.2 对象、类和类型 323
7.2 Python的类和对象 325
7.2.1 对象和操作 325
7.2.2 类定义 326
7.2.3 几点说明 332
7.2.4 编程实例 335
7.3 继承 339
7.3.1 继承、基类和派生类 340
7.3.2 编程实例 344
7.3.3 多继承 348
7.3.4 异常和类 349
7.4 实例:学校人事管理 350
7.4.1 概念分层和基础人员类 350
7.4.2 具体人员类的设计和实现 355
7.4.3 讨论 358
7.5 特殊方法名和特殊功能的类 359
7.5.1 容器类和迭代器 359
*7.5.2 上下文管理器和with语句 363
7.5.3 几个特殊方法名 364
7.6 补充材料 365
*7.6.1 Python类、对象和方法 365
7.6.2 面向对象的技术和方法 371
7.6.3 总结 373
练习 374
第8章 其他编程问题 377
8.1 图形用户界面 377
8.1.1 人机界面的问题 377
8.1.2 标准库包tkinter和图形用户界面 380
*8.1.3 tkinter的ttk包 400
8.1.4 GUI的简单应用和问题 402
8.1.5 应用程序的GUI设计和实现 404
8.1.6 总结和讨论 412
8.2 并发程序设计 414
8.2.1 并发程序 415
8.2.2 Python并发库threading包 418
8.2.3 定义自己的线程类 422
8.2.4 并发程序的一些问题 424
8.2.5 线程间通信和queue包 431
8.2.6 一个GUI并发程序实例 433
8.2.7 总结和讨论 436
练习 438
附录A Python语言速查 440
附录B 标准函数 444
附录C 书中使用的几个标准库包 448
附录D IDLE开发环境 449
参考文献及进一步阅读资料 452

教学资源推荐
作者: 刘海燕 荆涛 主编 王子强 武卉明 杨健康 周睿 编著
作者: Steven S.Muchnick
作者: 王雷 刘志成 周晶 编著
参考读物推荐
作者: (美)Danil Zburivsky,Sudheesh Narayanan 著
作者: 赵军 等编著
作者: 王国辉 陈英 等编著