具体描述
本书是以Python为编程语言、面向计算机科学教育中的程序设计基础课程与编程初学者的入门教材和自学读物。本书以Python为工具,详细讨论了与编程有关的各方面问题,介绍了从初级到高级的许多重要编程技术。本书特别强调编程中的分析和思考、问题的严格化和逐步分解、语言结构的正确选择、程序结构的良好组织,以及程序的正确和安全。书中通过大量实例及其开发过程,展示了好程序的特征和正确的编程工作方法。此外,书中还介绍Python语言的重要细节和工作原理,各章附有大量习题。本书既可以作为高校程序设计相关课程的教材,也适合希望学习Python语言和编程技术的读者阅读和参考。
作者简介
目录信息
第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
· · · · · · (收起)
读后感
用户评价
我原本是一个对计算机科学毫无概念的人,甚至连“算法”这个词都觉得高深莫测,但自从我遇到了《从问题到程序》,我的世界观彻底改变了。这本书就像一把钥匙,为我打开了通往编程世界的大门。它的厉害之处在于,它能够将最复杂的概念用最简单、最形象的方式呈现出来,让我这个完全的初学者也能轻松理解。作者的叙述逻辑非常清晰,从最基础的“问题”出发,一步步引导你构建出解决这个问题的“程序”。这种“问题导向”的学习方式,让我始终保持着学习的动力,因为我总能看到我所学的知识是如何服务于解决实际问题的。书中的例子非常贴合生活,比如如何用 Python 来处理一些日常的计算,或者分析一些有趣的数据。这些例子让我觉得编程离我并不遥远,它就是我们生活中解决各种问题的一种有力工具。让我印象最深的是,书中不仅仅是教我如何写出能运行的代码,更强调了代码的可读性和效率。作者会解释为什么某种写法比另一种更好,如何优化代码,这让我从一开始就养成了良好的编程习惯。我曾经因为代码写得太乱而感到沮丧,但在这本书的指导下,我学会了如何组织代码,如何给代码添加注释,让我的代码变得更易于理解和维护。而且,书中还穿插了一些关于计算机科学的有趣故事和历史,让我在学习技术的同时,也能对这个领域有一个更宏观的认识。这本书不仅仅是一本编程入门书,它更像是一位博学的导师,它教会我如何思考,如何解决问题,如何将我的想法转化为现实。
我之前一直对编程怀有敬畏之心,觉得它是一门高深的学问,离我非常遥远。直到我接触了《从问题到程序》,我才意识到,原来编程也可以如此有趣且贴近生活。《从问题到程序》之所以如此优秀,在于它将学习的起点设置在“问题”本身,而不是抽象的语法规则。作者就像一个睿智的向导,通过一个又一个实际生活中遇到的问题,自然而然地引入 Python 的各种概念和技巧。我特别喜欢它处理“数据处理”和“数据分析”的部分,作者用清晰的例子展示了如何使用 Python 来批量处理表格数据、分析统计信息,这对于我在日常工作中处理海量数据非常有帮助。书中关于“可视化”的章节也让我大开眼界,它教我如何使用 Python 库来生成各种图表,将枯燥的数据变得直观易懂。我曾经尝试过其他一些入门书籍,但它们往往过于侧重语法,让我觉得学习过程很机械。而这本书,它始终围绕着“解决问题”这个核心,让我的学习过程充满了目标感和成就感。每一次完成书中设定的挑战,都让我对编程有更深的理解和更强的信心。它让我明白,编程不是孤立的技术,而是解决现实世界问题的强大工具。这本书的语言风格也非常友好,作者用词准确,表述清晰,即使是复杂的概念,也能够被解释得通俗易懂。
这本书简直是一场智力与耐心的双重洗礼,它带领我从完全的门外汉,一步步走向了能够运用 Python 解决实际问题的能力。作者的功力体现在他能够将那些抽象、冷冰冰的代码概念,转化为生动、具象的解决问题的过程。他不是一味地灌输知识,而是通过一个接一个精心设计的“挑战”,引导我去思考、去尝试、去发现。我最欣赏的一点是,它不仅仅是教我如何“做”,更重要的是让我理解“为什么这样做”。例如,在学习循环语句时,作者会详细解释不同的循环结构适用于哪些场景,以及它们在效率上的差异。这种深入浅出的讲解,让我能够真正理解代码背后的逻辑,而不是死记硬背。我记得有一个章节是关于“递归”的,这个概念对我来说一直很抽象,但作者通过一个经典的“汉诺塔”问题,将递归的思想讲得淋漓尽致,让我茅塞顿开。此外,这本书还非常注重培养读者的“代码组织能力”和“软件工程思想”。它会教我如何编写具有良好可读性、可维护性的代码,如何进行单元测试,以及如何使用版本控制系统。这些看似“软”的技能,却对一个程序员的成长至关重要。这本书让我明白,写出能运行的代码只是第一步,写出优雅、高效、可维护的代码才是真正的目标。阅读这本书的过程,本身就是一种学习和成长的体验。
对于我来说,《从问题到程序》是一次令人惊喜的发现。我本以为会是一本枯燥的技术指南,没想到它却如此富有启发性。作者巧妙地将“问题”作为学习的起点,让我能够从解决实际问题的角度去理解编程的概念。书中对每一个 Python 概念的解释都非常到位,而且会结合大量的示例代码,让我能够立刻将所学知识付诸实践。我尤其赞赏书中关于“函数”的讲解,它不仅仅是教我如何定义函数,更是让我理解函数在代码模块化、提高复用性方面的重要性。通过书中设计的各种练习,我能够亲手构建出解决不同问题的函数,这极大地增强了我的学习信心。此外,这本书还非常注重培养读者的“调试能力”。它会教我如何识别代码中的错误,如何使用各种工具来定位问题,以及如何有效地修复 bug。这让我意识到,编程不仅仅是写出能运行的代码,更重要的是写出稳定、可靠的代码。我曾尝试过其他几本编程书,但它们要么过于理论化,要么例子不够贴近实际,很难让我产生学习的动力。而《从问题到程序》则不同,它就像一位经验丰富的向导,始终指引着我向前,让我能够一步步地掌握编程的精髓。书中关于“数据结构”的讲解也让我印象深刻,它用非常直观的方式解释了列表、字典等数据结构的特点和应用场景,让我能够更好地组织和处理数据。总而言之,这本书不仅教会了我 Python 编程,更重要的是,它教会了我如何像一个真正的程序员一样思考和解决问题。
这本书简直是一场 Python 编程的探险之旅,从我最初对编程一窍不通,到现在能够自信地构建自己的小程序,它的帮助是毋庸置疑的。作者以一种极其易懂的方式,将抽象的编程概念具象化,就像是在为我这个初学者量身定制的地图。每一次翻开书页,都像是踏入了一个新的领域,从最基础的变量、数据类型,到复杂的函数、类,再到数据结构和算法,每一步都走得扎实而清晰。最让我印象深刻的是,它不仅仅是告诉你“怎么做”,更重要的是解释了“为什么这样做”。这种对原理的深入剖析,让我不仅仅是机械地记忆代码,而是真正理解了代码背后的逻辑,能够灵活地运用这些知识去解决实际问题。比如,在学习列表推导式时,作者通过一系列生动的例子,让我看到了它在简化代码、提高效率方面的巨大潜力。而当我第一次成功地写出一个能够处理大量数据的脚本时,那种成就感是无法言喻的,这离不开书中对每一次迭代、每一次优化的细致指导。此外,书中穿插的计算思维的培养,更是让我受益匪浅。它教会我如何将复杂的问题分解成更小的、可管理的单元,如何识别模式,如何抽象出通用的解决方案。这种思维方式,不仅在编程中至关重要,在日常学习和工作中也同样适用。我特别喜欢书中那些“挑战”部分,它们总能在我感觉已经掌握了一些东西时,给我带来新的思考和突破。即使是那些看起来棘手的问题,在作者循循善诱的引导下,也逐渐变得清晰起来。总而言之,这本书不仅仅是一本编程教材,更是一位循循善诱的良师益友,它点燃了我对编程的热情,也塑造了我解决问题的能力。
我必须承认,在翻开《从问题到程序》之前,我对编程的理解基本上是零。我对它的印象一直停留在那些看起来很神秘的命令行和晦涩的代码中。但是,这本书完全改变了我的看法。作者的写作风格非常独特,他不是那种枯燥地罗列语法和函数,而是通过一个又一个精心设计的“问题”来引导读者学习。这种循序渐进的方式,让我感觉自己不是在被动地学习,而是在主动地探索和解决问题。我特别喜欢书中对“计算思维”的强调。它不仅仅是教你 Python 语言本身,更重要的是教会你如何像一个程序员一样思考:如何将一个大问题分解成小问题,如何寻找模式,如何抽象出通用的解决方案。这让我觉得,学完这本书,我获得的不仅仅是编程技能,更是一种重要的思维方式。书中的例子非常生动有趣,而且贴近实际生活,例如如何用 Python 脚本来整理文件,或者进行一些简单的数据分析。这些例子让我看到了编程在实际生活中的巨大应用价值,也让我更有动力去深入学习。而且,作者对代码的解释非常到位,他会详细地解释每一行代码的作用,以及为什么这样写。这让我能够真正理解代码背后的逻辑,而不是仅仅死记硬背。我尤其欣赏书中对于“调试”的讲解,它让我明白,写出有 bug 的代码是正常的,关键在于如何有效地找到并修复它们。这本书让我从一个编程小白,成长为一个能够独立解决问题的小程序员。
这本书真的颠覆了我对编程的认知,过去我总是觉得编程是一件非常枯燥、离我生活很遥远的事情,但《从问题到程序》让我看到了编程的趣味性和强大力量。它不是那种枯燥乏味的技术手册,而是像一个充满智慧的向导,带领我一步步探索 Python 的奥秘。书中对每一个概念的讲解都非常透彻,用词也十分精炼,不会有丝毫的冗余。我尤其欣赏作者的叙事方式,他善于将理论知识融入到实际问题的解决过程中,让我能够亲身感受到编程是如何将想法转化为现实的。举个例子,书中关于文件操作的部分,我原本以为会很难,但作者通过一个实际管理学生成绩的例子,将文件读写、数据处理等一系列操作讲得明明白白,让我仿佛置身其中,亲手完成了一次数据的处理。而且,这本书并没有止步于基础的语法,它还涉及到一些更深层次的内容,比如面向对象编程的思想,以及如何编写更具可读性和可维护性的代码。这些内容在很多入门书籍中都是很少见的,但它们对于一个想要真正掌握编程的人来说却至关重要。作者并没有强迫你记住大量的语法规则,而是让你理解规则背后的逻辑,这才是真正重要的。我曾经尝试过其他几本书,但总觉得它们要么过于理论化,要么过于琐碎,很难真正引起我的兴趣。而这本书,却像一股清流,让我沉浸其中,乐此不疲。它不仅教会了我如何编写程序,更重要的是,它培养了我独立思考、解决问题的能力。这本书的排版和插图也做得非常用心,让阅读过程更加愉悦。
在我看来,《从问题到程序》是一本真正能够点燃学习热情、引导实践的编程启蒙书。它没有像其他许多书籍那样,一开始就抛出晦涩的语法规则,而是从一个读者能够理解的“问题”出发,循序渐进地引导你一步步构建出解决这个问题的“程序”。这种“问题驱动”的学习模式,让我始终保持着高度的学习兴趣,因为我能清晰地看到我所学的知识是如何直接服务于解决具体问题的。我尤其喜欢书中对“数据结构”的讲解,它用非常生动形象的比喻,解释了列表、字典、集合等不同数据结构的特性和适用场景。例如,在处理学生信息管理时,如何选择列表还是字典,才能更高效地组织和查询数据,书中都有非常详细的阐述。而且,作者在讲解每个概念时,都会提供与之配套的练习题,这些练习题的难度设置非常合理,能够帮助我巩固所学知识,并逐步培养独立解决问题的能力。让我印象深刻的是,书中关于“函数式编程”的介绍,虽然篇幅不多,但却为我打开了新的思维视角,让我了解到除了传统的命令式编程,还有其他更加简洁、优雅的编程范式。这本书不仅仅是一本技术指南,更像是一位经验丰富的导师,它不仅教会我如何编写 Python 代码,更重要的是,它教会了我如何清晰地思考,如何逻辑地分析问题,以及如何通过编程将我的想法变为现实。
这本书的价值,对我而言,远远超出了“学习编程”的范畴。它教会了我一种全新的思考方式,一种更加系统、更加逻辑化的解决问题的方法。《从问题到程序》的精妙之处在于,它将编程学习的过程,与现实世界的问题解决紧密地联系在一起。作者不是简单地堆砌代码示例,而是通过一个又一个精心设计的“问题场景”,引导读者去思考如何构建程序来解决这些问题。我特别欣赏书中对于“算法效率”的讲解,它不仅让我了解了各种算法的原理,更让我深刻体会到了在处理大规模数据时,选择合适的算法能够带来巨大的性能提升。作者通过一些具体的例子,比如搜索算法和排序算法的比较,让我能够直观地感受到效率的差异。此外,这本书还非常注重培养读者的“代码设计能力”。它会教我如何编写模块化、可扩展的代码,如何利用函数和类来组织程序,以及如何编写清晰、易于理解的文档。这些内容对于我从一个初学者成长为一名合格的程序员至关重要。我曾经接触过一些其他的编程书籍,但它们往往只停留在语法层面,很难让我深入理解编程的本质。《从问题到程序》则不同,它让我看到了编程的全局观,让我明白编程不仅仅是敲代码,更是构建解决方案的过程。阅读这本书的过程,本身就是一次思维的锻炼。
这本书的价值远超我的想象,它不仅仅是一本Python编程入门书,更是一本教会我如何思考的宝典。作者以一种极其巧妙的方式,将抽象的编程概念与解决实际问题的过程紧密结合。从最基础的变量和数据类型,到复杂的函数和数据结构,每一个知识点都通过一个清晰的问题场景来呈现,让我能够亲身参与到解决问题的过程中。这种“实践出真知”的学习方式,让编程变得不再枯燥,而是充满探索的乐趣。我特别喜欢书中对于“算法”的讲解,它不是那种硬梆梆的理论,而是通过一系列生动的例子,让我体会到算法在提高效率和解决复杂问题中的关键作用。例如,书中关于排序算法的对比,就让我深刻理解了不同算法之间的效率差异,以及如何根据具体场景选择最优的算法。此外,这本书还非常注重培养读者的“计算思维”。它教会我如何将一个看似复杂的问题分解成更小、更易于管理的部分,如何识别问题中的模式,以及如何设计出通用、可复用的解决方案。这种思维方式,让我不仅在编程领域受益匪浅,在学习和生活中也变得更加有条理和高效。我曾经尝试过其他一些编程书籍,但都无法像这本书一样,让我从本质上理解编程的魅力。它让我明白,编程不仅仅是敲代码,更是用逻辑和创造力去解决问题的艺术。这本书的语言风格也很吸引人,作者用词精准,表述清晰,让我阅读起来毫不费力,仿佛在与一位经验丰富的导师对话。
裘老师确实苦口婆心,把问题掰开了来谈,讲的很细,就是有时候太细了一点
应该是写的还是挺清晰的,对编程思维有启发性
裘老师确实苦口婆心,把问题掰开了来谈,讲的很细,就是有时候太细了一点
裘老师确实苦口婆心,把问题掰开了来谈,讲的很细,就是有时候太细了一点
应该是写的还是挺清晰的,对编程思维有启发性