具体描述
本书基于MIT(麻省理工学院)的一门课程写成,主要目标是帮助读者掌握并熟练使用各种计算技术。本书涵盖了Python的大部分特性,重点介绍如何使用Python 这门语言,共包含编程基础、Python程序设计语言、理解计算的关键概念、计算问题的解决技术等四个方面。本书将Python语言特性和编程方法贯穿全书,目的是帮助读者在学习Python的同时掌握如何使用计算来解决有趣的问题。
作者简介
作者简介:
John V. Guttag
1999年至2004年任麻省理工学院电气工程与计算机科学系主任(此前担任了5年的副主任)。Guttag教授目前是计算机科学与人工智能实验室网络及移动系统组的联合负责人。此外,他还进行软件工程、机器定理证明、硬件验证等领域的研究以及培训工作,并出版过相关主题的图书。Guttag教授获得美国布朗大学英语专业学士学位、应用数学硕士学位,获得多伦多大学计算机科学博士学位。
译者简介:
梁杰
北京航空航天大学计算机科学与技术专业大四学生。热爱开源、JavaScript、Python,喜欢做各种各样有趣的事情。
目录信息
第2章 Python介绍 6
2.1 Python的基本元素 7
2.1.1 对象、表达式和数值类型 8
2.1.2 变量和赋值 9
2.1.3 IDLE 11
2.2 分支程序 12
2.3 字符串和输出 14
2.4 循环 16
第3章 一些简单的数值类程序 19
3.1 穷举法 19
3.2 for循环 21
3.3 近似解和二分查找 23
3.4 关于浮点数 26
3.5 牛顿拉夫逊方法 28
第4章 函数、作用域和规范抽象 30
4.1 函数和作用域 31
4.1.1 函数定义 31
4.1.2 关键字参数和默认值 32
4.1.3 作用域 33
4.2 规范 36
4.3 递归 39
4.3.1 斐波那契数 40
4.3.2 回文和分治 42
4.4 全局变量 44
4.5 模块 45
4.6 文件 47
第5章 结构化类型、可变性和高阶函数 49
5.1 元组 49
5.2 列表和可变性 51
5.2.1 克隆 55
5.2.2 列表解析 56
5.3 函数对象 57
5.4 字符串、元组和列表 58
5.5 字典 59
第6章 测试和调试 63
6.1 测试 63
6.1.1 黑盒测试 64
6.1.2 白盒测试 66
6.1.3 执行测试 67
6.2 调试 68
6.2.1 学习调试 70
6.2.2 设计实验 71
6.2.3 如果遇到阻碍 73
6.2.4 找到“目标”错误之后 74
第7章 异常和断言 75
7.1 处理异常 75
7.2 把异常当作控制流来使用 78
7.3 断言 81
第8章 类和面向对象编程 82
8.1 抽象的数据类型和类 82
8.1.1 使用抽象的数据类型来设计程序 86
8.1.2 使用类来记录学生和教师 86
8.2 继承 88
8.2.1 多层继承 90
8.2.2 替代法则 92
8.3 封装和信息隐藏 92
8.4 进阶实例:抵押贷款 97
第9章 算法复杂度简介 101
9.1 思考计算复杂度 101
9.2 渐近表示 104
9.3 一些重要的复杂度 105
9.3.1 常数复杂度 105
9.3.2 对数复杂度 106
9.3.3 线性复杂度 106
9.3.4 对数线性复杂度 107
9.3.5 多项式复杂度 107
9.3.6 指数复杂度 108
9.3.7 复杂度对比 110
第10章 一些简单的算法和数据结构 112
10.1 搜索算法 113
10.1.1 线性搜索和间接访问元素 113
10.1.2 二分查找和利用假设 114
10.2 排序算法 117
10.2.1 归并排序 118
10.2.2 把函数当做参数 120
10.2.3 Python中的排序 121
10.3 散列表 122
第11章 绘图以及类的扩展内容 126
11.1 使用PyLab绘图 126
11.2 扩展实例:绘制抵押贷款 131
第12章 随机算法、概率以及统计 137
12.1 随机程序 138
12.2 统计推断和模拟 139
12.3 分布 149
12.3.1 正态分布和置信水平 151
12.3.2 均匀分布 154
12.3.3 指数分布和几何分布 154
12.3.4 本福德分布 156
12.4 强队的获胜概率 157
12.5 散列和碰撞 160
第13章 随机游动和数据可视化 163
13.1 醉汉游动 163
13.2 有偏随机游动 169
13.3 危机重重的田地 175
第14章 蒙特卡罗模拟 177
14.1 帕斯卡的问题 178
14.2 过还是不过 179
14.3 使用查表提高性能 182
14.4 寻找π 183
14.5 模拟模型的结束语 187
第15章 理解实验数据 189
15.1 弹簧的行为 189
15.2 弹丸的行为 196
15.2.1 决定系数 198
15.2.2 使用计算模型 199
15.3 拟合指数分布 200
15.4 当理论缺失时 203
第16章 谎言和统计 205
16.1 垃圾输入只能产生垃圾输出 205
16.2 图表会骗人 206
16.3 与此谬误 208
16.4 统计方法并不能代替数据 209
16.5 抽样偏差 210
16.6 语境问题 211
16.7 当心外推法 212
16.8 得克萨斯神枪手谬误 213
16.9 百分比会说谎 215
16.10 小心谨慎 215
第17章 背包和图的最优化问题 216
17.1 背包问题 216
17.1.1 贪婪算法 217
17.1.2 0/1背包问题的最优解法 219
17.2 图的最优化问题 222
17.2.1 一些典型的图论问题 226
17.2.2 疾病传播和最小割 227
17.2.3 最短路径、深度优先搜索和广度优先搜索 227
第18章 动态规划 233
18.1 斐波那契数列 233
18.2 动态规划和0/1背包问题 235
18.3 动态规划和分治 241
第19章 机器学习简介 242
19.1 特征向量 244
19.2 距离度量 245
19.3 聚类 249
19.4 类型示例和聚类 250
19.5 K-means聚类 253
19.6 人造案例 255
19.7 稍微真实一些的示例 259
19.8 小结 265
附录 Python 2.7快速参考 266
· · · · · · (收起)
读后感
MIT本科 6.0001和6.0002课程指定教材,MIT的教授结合教学自己编写的书,非常适合跟open course 结合使用,原版书要几百块,中文正版不到一百,在家里也能上MIT的课,一定记得去官网下载课件和习题,讲课视频B站上有,目前MIT open course上发布的是2016年秋季学期的课程,版本p...
一开始想着应该有400+页,结果不到300页。 python语言、一般的算法理论、一些数学问题的算法、软件测试、机器学习都有所涉及,但是书本身太薄,这样很多地方势必写得不清楚。 要举例子的话,我觉得类和面向对象编程说得太简略。 另外python现在应该普及3.x了,没必要再以2.x...
书是一名大四生翻译的,有些地方表达的不地道,姑且随手找出几处吐吐槽。 p1: [从内存的角度来说,一台普通的计算机可能有几百GB] 我从来没见过一台普通计算机的内存个能有几百GB,我猜测原文应该用的是memory,这里翻译成存储设备比较合适。 p3:[当一个整数整数存在整数立...
MIT本科 6.0001和6.0002课程指定教材,MIT的教授结合教学自己编写的书,非常适合跟open course 结合使用,原版书要几百块,中文正版不到一百,在家里也能上MIT的课,一定记得去官网下载课件和习题,讲课视频B站上有,目前MIT open course上发布的是2016年秋季学期的课程,版本p...
MIT本科 6.0001和6.0002课程指定教材,MIT的教授结合教学自己编写的书,非常适合跟open course 结合使用,原版书要几百块,中文正版不到一百,在家里也能上MIT的课,一定记得去官网下载课件和习题,讲课视频B站上有,目前MIT open course上发布的是2016年秋季学期的课程,版本p...
用户评价
《编程导论》这本书,可以说是彻底刷新了我对“学习一门新技能”的固有观念。它并非一本让你死记硬背的教科书,而更像是一位循循善诱的向导,带你逐步探索编程的奥秘。书中的语言非常简洁明了,避免了使用过多的专业术语,即使是初学者也能轻松理解。我特别欣赏它对于“变量”和“函数”的讲解,作者用了一些非常生动的比喻,比如变量就像一个可以装不同东西的盒子,而函数就像一个完成了特定任务的工具,这让我对这两个基础概念有了深刻的印象。它并没有一开始就给你讲复杂的程序,而是从最基础的逻辑思维入手,让你理解计算机是如何工作的,以及编程的意义所在。这种由浅入深,由易到难的学习路径,让我觉得学习编程不再是一件困难的事情,而是充满乐趣和成就感的过程。它让我看到了,原来编程也可以如此“亲民”,如此“有趣”。
刚开始翻阅《编程导论》,我脑子里还是充满着对“代码”的刻板印象,认为那是一堆只有极客才能理解的符号。然而,这本书完全颠覆了我的认知。它并没有急于展示那些令人生畏的代码,而是从更宏观的角度,解释了编程的“哲学”。它让我明白,编程不仅仅是写代码,更是一种创造性的活动,一种将思想具象化的过程。我印象深刻的是关于“数据结构”的讨论,虽然书中没有给出复杂的结构图,但通过一些非常生活化的比喻,比如图书馆的书架、购物篮,来解释信息是如何组织和存储的,让我对数据结构有了直观的理解。这种从“为什么”到“是什么”,再到“怎么做”的层层递进,让我觉得学习过程非常顺畅。它让我看到了编程背后蕴含的逻辑思维和问题解决的能力,这不仅仅是技术,更是一种可以迁移到任何领域的思维方式。我开始觉得,掌握编程,就像是获得了一把能够解构和构建世界的钥匙。
终于抽空翻了几页《编程导论》,感觉像是踏入了一个全新的世界。之前对编程的印象,总觉得是那些高高在上的代码,晦涩难懂,遥不可及。但这本书的开篇,并没有上来就扔一堆专业术语,而是用一种非常平易近人的方式,就像一位老朋友在给你讲述一个有趣的故事。它并没有直接教你写代码,而是从“为什么”开始,解释了编程在现代社会中的重要性,以及它如何渗透到我们生活的方方面面。我读到关于信息是如何被处理,计算机又是如何“思考”的部分,虽然还是有些概念性的东西,但作者的描述让我觉得,这似乎并不是什么不可逾越的鸿沟。尤其是一些类比,比如把编程比作是给机器下达指令,就像我们平时和别人沟通一样,只是语言不同。这让我对编程产生了一种初步的亲近感,觉得它可能并没有想象中那么遥不可及,也许我也可以尝试去理解和掌握它。这种循序渐进的引导方式,给了我很大的信心,不再感到畏惧,而是开始对后续的内容充满了好奇和期待。
读《编程导论》的过程,就像是经历了一场思维的“洗礼”。我一直以为编程就是一行行枯燥的字母和符号,但这本书却让我看到了代码背后的逻辑和创造力。它不仅仅是关于技术,更是关于如何用一种严谨而有条理的方式去解决问题。书中的一些例子,虽然还没有涉及到复杂的算法,但已经能让我感受到,通过编程,我们可以将抽象的想法转化为实际的解决方案。我记得有一段讲到“流程控制”的,用非常生动的比喻说明了计算机如何按照预设的步骤一步步执行任务,这让我一下子就明白了“顺序”、“选择”和“循环”这些概念的本质。这种将复杂概念简单化,同时又不失其准确性的讲解方式,真的非常出色。我发现,原来编程不仅仅是程序员的工作,更是一种思维模式,一种分析和解决问题的能力,这对于我这样非技术背景的人来说,简直是打开了新世界的大门。它让我开始思考,在日常生活中,我遇到的很多问题,是不是也可以用类似编程的逻辑去分析和拆解,从而找到更有效的解决办法。
《编程导论》这本书,给我最大的惊喜在于它的“人文关怀”。它并非冷冰冰的技术手册,而是充满了对读者的体贴和引导。我常常在阅读过程中,感觉作者就像一个耐心的导师,时刻关注着我的理解进度。书中对于一些容易混淆的概念,都会反复强调,并且提供多种角度的解释,确保我能够真正理解。而且,作者并没有一上来就灌输大量的知识点,而是非常有策略地穿插了一些小故事和历史背景,让我了解到编程是如何一步步发展到今天的。这让我觉得,我不是在被动地学习,而是在参与一场关于技术演进的旅程。尤其是关于“算法”的章节,虽然还没有深入到具体的代码实现,但它通过一些生活中的例子,比如如何给小朋友讲故事,如何安排一天的工作,来阐述算法的设计思路,让我对算法的“效率”和“最优解”有了初步的认识。这种润物细无声的教学方式,让我觉得学习编程不再是一件痛苦的事情,反而充满乐趣。
知识密度刚刚好 引经据典堪比李贤平老师概率论答案的“青山遮不住 毕竟江流去”……
公开课讲义
公开课讲义
值得一读!
知识密度刚刚好 引经据典堪比李贤平老师概率论答案的“青山遮不住 毕竟江流去”……