Searching...
简体中文
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Try Full Access for 7 Days
Unlock listening & more!
Continue

重点摘要

1. 程序反映人类问题解决能力

计算机科学家最重要的技能就是解决问题。

计算思维。 编程本质上是一种结构化的问题解决方法,反映了人类如何将复杂任务分解为更小、更易管理的步骤。这包括明确问题、创造性地设计解决方案,并以计算机能够理解的语言清晰准确地表达这些解决方案。

基本指令。 每个程序,无论复杂程度如何,都是由一些基本指令构成的:

  • 输入:收集数据。
  • 输出:显示结果。
  • 数学:进行计算。
  • 条件执行:做出决策。
  • 重复:重复操作。

抽象与分解。 编程涉及将大型复杂任务分解为更小、更简单的子任务,直到每个子任务可以用基本指令之一来执行。这种抽象和分解的过程是管理复杂性和创建有效程序的关键。

2. 变量:持有值的名称

变量是指向值的名称。

赋值与状态。 变量是编程的基础,充当值的命名容器。赋值语句创建变量并为其分配特定值,使程序能够存储和操作数据。状态图形象地表示了在特定时间点变量及其对应的值。

命名约定。 选择有意义的变量名称对于代码的可读性和可维护性至关重要。变量名称应具有描述性,使用小写字母并用下划线分隔单词(例如,user_nametotal_count)。避免使用关键字(例如,classdefwhile)作为变量名称。

表达式与语句。 表达式结合值、变量和运算符以产生结果。而语句则是执行某个操作的代码单元,例如创建变量或显示值。理解表达式与语句之间的区别对于编写正确有效的代码至关重要。

3. 函数:可重用的代码块

在编程的上下文中,函数是执行计算的一系列命名语句。

定义与调用。 函数是执行特定任务的命名代码块。定义函数时需要指定其名称、参数(输入)以及执行的语句序列。调用函数会执行这些语句,每次可能使用不同的参数。

模块化与可重用性。 函数通过将程序分解为更小的自包含单元来促进模块化。这使得代码更易于阅读、调试和维护。函数还支持代码重用,因为同一个函数可以从程序的不同部分多次调用。

局部作用域与栈图。 在函数内部定义的变量是局部的,意味着它们仅在该函数的作用域内存在。参数也是局部变量。栈图对于可视化函数的执行非常有用,显示每一步的函数调用、局部变量和参数。

4. 接口设计:函数协同工作

函数的接口是其使用方式的总结:参数是什么?函数做什么?返回值是什么?

封装与泛化。 封装涉及将一段代码包装成一个函数,赋予其名称并使其可重用。泛化则是向函数添加参数,使其更灵活,适应不同的输入。

清晰接口。 函数的接口是其使用方式的总结,包括参数、目的和返回值。清晰的接口使用户能够与函数交互,而无需理解其内部工作原理。

重构与开发计划。 重构是改善现有代码结构和设计的过程,而不改变其功能。开发计划提供了一种结构化的方法来编写程序,例如“封装与泛化”方法,涉及从小程序开始,将其封装成函数,使用参数进行泛化,并重复该过程。

5. 条件与递归:决策制定

布尔表达式是一个要么为真要么为假的表达式。

条件执行。 条件语句(if、elif、else)允许程序根据特定条件执行不同的代码块。布尔表达式用于控制执行流程,评估结果为真或假。

逻辑运算符。 逻辑运算符(and、or、not)结合布尔表达式以创建更复杂的条件。这些运算符使程序能够基于多个因素做出决策。

递归。 递归是一种强大的技术,其中一个函数在其自身定义中调用自己。递归函数必须有一个基例,以停止递归并防止无限循环。栈图对于可视化递归函数的执行非常有用。

6. 有效函数:返回结果

当你调用一个有效函数时,你几乎总是想对结果做些什么;例如,你可能会将其赋值给一个变量或将其用作表达式的一部分。

返回值。 有效函数是返回值的函数,这些值可以在程序的其他部分使用。return语句指定函数将返回的值。

增量开发。 增量开发是一种编写大型函数的策略,通过逐步添加和测试小量代码来实现。这种方法有助于避免长时间的调试会话,并使识别和修复错误变得更容易。

组合与布尔函数。 函数可以通过在另一个函数内调用一个函数来组合。布尔函数返回真或假,通常用于将复杂测试隐藏在函数内部。

7. 迭代:重复操作

计算机常用于自动化重复任务。

重新赋值与更新。 变量可以被重新赋值为新值,并且其值可以根据之前的值进行更新。这使得程序能够跟踪变化的状态并执行迭代计算。

While 循环。 while语句提供了一种在特定条件为真时重复代码块的方法。循环体应更改一个或多个变量的值,以便条件最终变为假,从而终止循环。

Break 语句与算法。 break语句允许你根据特定条件提前退出循环。算法是解决某类问题的逐步程序,通常涉及迭代计算。

8. 字符串:字符序列

字符串是字符的序列。

索引与长度。 字符串是字符的序列,单个字符可以使用括号运算符和索引进行访问。len函数返回字符串中的字符数。

遍历与切片。 字符串可以使用for循环进行遍历,允许你逐个处理每个字符。字符串切片允许你根据索引范围提取字符串的部分内容。

不可变性与方法。 字符串是不可变的,意味着其字符不能直接更改。然而,可以使用字符串方法基于原始字符串的修改创建新字符串。

9. 文字游戏:案例研究

在没有使用最常见的符号的情况下,构建一个孤立的思想是困难的。

阅读与处理。 本案例研究专注于通过搜索具有特定属性的单词来解决文字谜题。它涉及从文件中读取单词列表,去除空格和标点符号,并将单词转换为小写。

搜索函数。 练习涉及编写函数,搜索满足特定条件的单词,例如不包含“e”、避免某些字母、仅使用某些字母或使用所有必需字母。

开发计划。 开发计划涉及将问题简化为之前解决过的问题,例如认识到uses_all可以通过uses_only来解决。

10. 列表:可变序列

列表是值的序列。

列表基础。 列表是多功能的可变序列,可以容纳任何类型的元素。它们使用方括号创建,并可以通过索引访问。

列表操作与方法。 列表支持各种操作,包括连接(+)、重复(*)和切片。它们还提供添加元素(appendextend)、删除元素(popremovedel)和排序(sort)的方法。

映射、过滤与归约。 常见的列表操作可以表示为映射、过滤和归约模式的组合。这些模式涉及转换元素、根据条件选择元素以及将元素组合成单一值。

11. 字典:键值映射

字典类似于列表,但更为通用。

字典基础。 字典是将键映射到值的数据结构。与列表不同,字典是无序的,并且使用键而不是索引进行访问。

字典操作。 字典支持添加键值对、使用键访问值、检查键的存在性以及遍历键等操作。get方法提供了一种访问值的方式,如果未找到键,则返回默认值。

反向查找与备忘录。 反向查找涉及查找与给定值关联的键,这需要在字典中进行搜索。备忘录是存储在字典中的先前计算值,以避免冗余计算,从而提高效率。

12. 元组:不可变序列

元组是值的序列。

元组基础。 元组是不可变序列,类似于列表,但其元素在创建后不能修改。它们使用括号和逗号定义。

元组赋值。 元组赋值允许你同时将序列中的值赋给多个变量。这是一种简洁优雅的方式来交换变量值或从列表或元组中解包元素。

可变长度参数与列表和元组。 函数可以使用*args语法接受可变数量的参数,这会将参数收集到一个元组中。zip函数将多个序列组合成一个元组列表,允许你并行遍历它们。

13. 数据结构选择:案例研究

算法分析的实际目标是预测不同算法的性能,以指导设计决策。

词频分析。 本案例研究涉及分析文本文件中的词频,展示了使用字典和列表存储和处理数据的用法。它还引入了随机数的概念及其在模拟中的应用。

马尔可夫分析。 马尔可夫分析是一种表征单词在序列中相互跟随概率的技术。这涉及构建一个字典,将前缀映射到可能的后缀,从而生成模仿原始文本风格的随机文本。

数据结构选择。 关键要点是选择适当的数据结构以应对特定任务的重要性。需要考虑的因素包括实现的简易性、运行时性能和存储空间。

14. 文件:持久存储

本书的目标是教你像计算机科学家一样思考。

读取与写入文件。 文件提供了一种在硬盘或其他存储介质上持久存储数据的方法。Python提供了打开、读取和写入文本文件的函数。

格式运算符与文件名和路径。 格式运算符(%)允许你创建带有格式化值的字符串。os模块提供了处理文件名和路径的函数,包括查找当前目录、检查文件是否存在以及列出目录内容。

捕获异常与数据库。 try语句允许你捕获在文件操作过程中可能发生的异常,防止程序崩溃。dbm模块提供了创建和更新数据库文件的接口,这些文件以键值格式存储数据。

最后更新日期:

评论

4.12 满分 5
平均评分来自 1k+ 来自Goodreads和亚马逊的评分.

《思考Python》获得了大多数积极的评价,因其清晰、简洁以及适合初学者的方式而受到赞扬。读者们欣赏其中的实用练习、免费提供的资源以及对计算机科学概念的关注。有些人认为对于完全的初学者来说,这本书有些挑战,指出其中包含较多数学相关的例子和练习。该书因其结构化的方式而受到称赞,涵盖了Python基础和编程基本概念。尽管少数评论者觉得书中内容令人沮丧或过于技术化,但许多人仍然推荐它作为学习Python和计算机编程的优秀入门书籍,适合初学者以及有一定经验的读者。

Your rating:
4.43
13 评分

关于作者

艾伦·B·唐尼是奥林学院的名誉教授,同时也是软件和数据科学领域的多产作者,撰写了多本免费的教科书。他的作品包括《思考Python》、《思考贝叶斯》和《思考复杂性》,均由O'Reilly Media出版。唐尼的教育背景令人印象深刻,拥有来自知名学府的学位:加州大学伯克利分校的计算机科学博士学位,以及麻省理工学院的硕士和学士学位。他还维护一个名为“可能过度思考”的博客,探讨贝叶斯概率和统计等主题,进一步展示了他在这些领域的专业知识。

Listen to Summary
0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Home
Library
Get App
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Recommendations: Personalized for you
Ratings: Rate books & see your ratings
100,000+ readers
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
All summaries are free to read in 40 languages
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 10
📜 Unlimited History
Free users are limited to 10
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on May 16,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
100,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

Settings
General
Widget
Loading...