登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入   新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書

『簡體書』编程导论——以Python为舟

書城自編碼: 3256312
分類:簡體書→大陸圖書→教材研究生/本科/专科教材
作者: 沙行勉
國際書號(ISBN): 9787302505976
出版社: 清华大学出版社
出版日期: 2018-09-01


書度/開本: 16开 釘裝: 平装

售價:HK$ 99.1

我要買

share:

** 我創建的書架 **
未登入.


新書推薦:
明代社会变迁时期生活质量研究
《 明代社会变迁时期生活质量研究 》

售價:HK$ 308.2
律令国家与隋唐文明
《 律令国家与隋唐文明 》

售價:HK$ 74.8
紫云村(史杰鹏笔下大唐小吏的生死逃亡,新历史主义小说见微之作,附赠5张与小说内容高度契合的宣纸彩插)
《 紫云村(史杰鹏笔下大唐小吏的生死逃亡,新历史主义小说见微之作,附赠5张与小说内容高度契合的宣纸彩插) 》

售價:HK$ 101.2
现代吴语的研究(中华现代学术名著3)
《 现代吴语的研究(中华现代学术名著3) 》

售價:HK$ 66.7
天下的当代性:世界秩序的实践与想象(新版)
《 天下的当代性:世界秩序的实践与想象(新版) 》

售價:HK$ 79.4
德国天才4:断裂与承续
《 德国天才4:断裂与承续 》

售價:HK$ 112.7
妈妈的情绪,决定孩子的未来
《 妈妈的情绪,决定孩子的未来 》

售價:HK$ 43.7
推拿纲目
《 推拿纲目 》

售價:HK$ 414.0

 

建議一齊購買:

+

HK$ 98.0
《Python社会媒体挖掘》
+

HK$ 154.8
《数据结构与算法:Python语言实现》
+

HK$ 83.8
《Python数据可视化之matplotlib实践》
+

HK$ 69.6
《图解算法——使用Python》
+

HK$ 70.7
《Python爬虫开发 从入门到实战(微课版)》
+

HK$ 55.4
《Python网络编程(Linux)》
編輯推薦:
全书包含370段程序实例和300道习题。作者为普林斯顿大学博士、千人计划专家、长江学者,曾担任美国UTD大学教师20余年,在讲授Python编程方面具有丰富经验。
《编程导论以Python为舟》为双色印刷,重点突出,便于读者深入理解和查询知识点。
內容簡介:
本书以大量的编程实例与作者多年编程实践的体会来揭示编程的本质,系统性地指导读者如何编程。书中所有代码都用Python语言编写,通过编程实例讲解Python语言的所有知识点,使读者在掌握编程思维和技巧(逻辑思维能力、计划构建能力、循环计算能力、递归求解能力等)的同时,自然而然地熟练掌握Python语言。
本书既适合作为程序设计基础编程导论Python语言程序设计等课程的教材,也适合参加编程竞赛的、自学Python编程的中学生、大中专学生、程序员及普通读者参考。
關於作者:
沙行勉 Edwin Sha,博士生导师,2000年起任美国终身制正教授 Full Professor,中国国家千人计划(A类)特聘专家,长江学者讲座教授,海外杰出青年学者。于1986年获得台湾大学计算机科学系学士学位,在海军陆战队服役两年后赴美国普林斯顿大学(Princeton University)就读。于1991年和1992年分别获美国普林斯顿大学计算机科学系硕士学位和博士学位。1992年起任教于美国圣母大学(University of Notre Dame)计算机科学与工程系,并于1995年起担任该系副系主任和研究生部主任。2000年起作为终身制正教授任教于美国得克萨斯州大学达拉斯分校(UTD)计算机科学系,2001年曾担任计算机科学部主任。任上海交通大学、山东大学、北京航空航天大学、湖南大学等客座、兼任教授或博导。2008年被评为海外杰出青年学者。2010年起任教育部长江学者讲座教授。2011年起任国家千人计划特聘专家,20122017年任重庆大学国家特聘教授和计算机学院院长。现全职任上海华东师范大学终身特聘教授。
沙行勉 Edwin Sha,博士生导师,2000年起任美国终身制正教授 Full Professor,中国国家千人计划(A类)特聘专家,长江学者讲座教授,海外杰出青年学者。于1986年获得台湾大学计算机科学系学士学位,在海军陆战队服役两年后赴美国普林斯顿大学(Princeton University)就读。于1991年和1992年分别获美国普林斯顿大学计算机科学系硕士学位和博士学位。1992年起任教于美国圣母大学(University of Notre Dame)计算机科学与工程系,并于1995年起担任该系副系主任和研究生部主任。2000年起作为终身制正教授任教于美国得克萨斯州大学达拉斯分校(UTD)计算机科学系,2001年曾担任计算机科学部主任。任上海交通大学、山东大学、北京航空航天大学、湖南大学等客座、兼任教授或博导。2008年被评为海外杰出青年学者。2010年起任教育部长江学者讲座教授。2011年起任国家千人计划特聘专家,20122017年任重庆大学国家特聘教授和计算机学院院长。现全职任上海华东师范大学终身特聘教授。
至2017年,已在相关国际学术会议及国际核心期刊上发表英文学术论文400余篇, 其中包括60余篇IEEE和ACM Transactions期刊论文。共获各类国家级教学、科研奖项近40项,其中包括: 美国Oak Ridge 大学联盟颁发的杰出青年教授奖,美国国家科学基金颁发的杰出学术发展奖, 美国圣母大学颁发的杰出教学奖,世界顶级期刊ACM Transactions(ACM TODAES)颁发的2011年度最佳论文奖,以及IEEE Transactions on Computers颁发的2016年度代表论文等。多次以大会主席身份主持国际重要学术会议。沙教授在教学方面深受中美学生的喜爱,例如,在美国从教期间,他在每学期由学生给老师打分的教学评鉴中都得到高分。沙行勉教授喜爱中国传统文化及儒释道哲学,以人才培养、教学育人为其终身的兴趣及志向。
目錄
目录
第1章初探编程之境
1.1计算机编程的基本概念
1.1.1编程如何解决问题
1.1.2解决鸡兔同笼问题的编程思维
1.1.3解决排序与合并问题的编程思维
1.1.4解决过河问题的编程思维
1.1.5程序的基本要素
1.2乘Python之舟进入计算机语言的世界
1.2.1什么是Python
1.2.2如何在Windows中使用Python
1.3解释a=a 3
1.3.1介绍变量
1.3.2关于a=a 3
1.3.3常用算术运算符
1.4介绍数据类型
1.4.1布尔类型
1.4.2列表
1.4.3字符串
1.5学习Python的控制语句
1.5.1条件控制语句if语句
1.5.2循环控制语句for循环
1.5.3循环控制语句while循环
习题
第2章巩固编程基础
2.1再谈Python的循环控制语句
2.1.1遍历加积累的循环结构
2.1.2以不同编程方式解决相同问题
2.1.3for与while循环的比较
2.1.4中国余数定理的循环实现
2.2函数的简介
2.2.1什么是函数
2.2.2函数的创建与调用
2.2.3几种常用的内置函数
2.3探讨编程思路
2.3.1以多项式运算为例
2.3.2编程思路的总结
2.4讨论循环中的一些技巧
2.4.1讨论for i in range:结构
2.4.2讨论for e in L:结构,L为一个列表
2.5活学活用运行Python解决问题
2.5.1几种简单的排序算法及衍生问题
2.5.2二进制、十进制等进制之间的转换问题
2.5.3扑克牌游戏21点
2.5.4老虎机游戏
习题
第3章深谈Python函数、变量与输入输出
3.1深入了解函数的各种性质
3.1.1编写完美函数
3.1.2参数与返回值
3.1.3局部变量与全局变量
3.1.4嵌套函数
3.1.5参数类型
3.2再谈序列与字典数据类型
3.2.1列表与元组
3.2.2字符串
3.2.3字典
3.3关于Python数据类型的注意事项
3.3.1可变与不可变类型的讨论
3.3.2参数的传递问题
3.3.3默认参数的传递问题可选
3.4深入探讨列表的常用操作与开销
3.4.1添加列表元素的讨论
3.4.2删除列表元素的讨论
3.4.3生成列表的一些技巧
3.5输入输出、文件操作与异常处理
3.5.1输入
3.5.2输出
3.5.3文件操作
3.5.4异常处理
习题
第4章探究递归求解的思维方式
4.1理解递归求解的思维方式
4.1.1递归的基本思路
4.1.2递归求解的例子
4.2用递归方式重温例题
4.2.1递归实现数列求和
4.2.2递归实现归并
4.2.3递归求解因数分解
4.3list、string内置函数的非递归与递归实现
4.3.1列表内置函数的实现
4.3.2字符串内置函数的实现
4.4四种不同的递归方式来解决排序问题
4.4.1选择排序
4.4.2插入排序
4.4.3快速排序
4.4.4归并排序
4.4.5四种排序方式的比较
习题
第5章熟练递归编程
5.1二分法求解问题
5.1.1什么是二分法
5.1.2在有序序列中使用二分法查找元素位置
5.1.3求解算术平方根
5.2求两个数的最大公因数
5.2.1因数分解法求最大公因数
5.2.2欧几里得算法求最大公因数
5.2.3讨论因数分解法与欧几里得算法的优劣
5.3中国余数定理问题
5.3.1介绍相关的基础知识
5.3.2中国余数定理问题的求解
5.4关于递归函数开销的讨论
5.4.1函数调用的开销
5.4.2参数传递过程中的开销
5.4.3重复计算的开销
5.5用递归思维解决线性方程组问题
5.6用各种编程方式解决排列问题
5.6.1全排列问题
5.6.2通用排列问题
5.7用各种编程方式解决组合问题
5.7.1在排列问题的解法上解决组合问题解法一
5.7.2非递归方式解决组合问题解法二
5.7.3特殊二分方式解决组合问题解法三
5.7.4循环递归方式解决组合问题解法四
习题
第6章智能是计算出来的
6.1老鼠走迷宫问题
6.2菜鸡狼过河问题
6.3AB猜数字游戏
6.424点游戏
6.5最后拿牌就输
习题
第7章面向对象编程与小乌龟画图
7.1初识面向对象编程
7.1.1什么是对象
7.1.2体会面向对象编程的优势
7.2面向对象中的概念
7.2.1类与对象
7.2.2Python中的__init__方法
7.2.3self变量和pass关键字
7.2.4Python中公有和私有类型的定义方式
7.3了解面向对象的三大特性
7.3.1封装
7.3.2继承
7.3.3多态
7.4初识小乌龟
7.4.1小乌龟的属性
7.4.2基本图形的绘制
7.4.3递归图形的绘制
7.5多个小乌龟的动图绘制
7.5.1过河游戏
7.5.2小老鼠走迷宫
习题
第8章掌握编程的精华算法
8.1深入浅出之算法
8.1.1算法时间复杂度分析
8.1.2图的基本介绍
8.2深度优先搜索
8.2.1何为深搜
8.2.2图的深搜
8.2.3拓扑排序问题
8.2.4一个有趣的迷宫例子
8.3最短路径问题
8.3.1有向无环图的最短路径问题
8.3.2权值非负的有环图的最短路径问题
8.4动态规划算法
8.4.1拦截导弹问题
8.4.2背包问题
8.4.3最短路径问题
习题
参考文献
內容試閱
前言
各位读者想要学习编程吗?不管你有没有编程基础,这本书都会满足你的需求。本书将会带领读者由浅入深地学习编程,通过大量有趣的编程问题以及对实例的分析、运用和解释,培养读者解决问题的能力(也就是计算思维能力),同时通过这些有趣的实例来指导读者学习如何具体地组织数据结构、构建各类函数与程序片段等编程技巧。计算思维的具体表现形式是算法,可以说,算法是程序的精神,而函数与数据结构是算法的具体实现,或者说是程序的骨肉。编程者需要兼顾程序的精神与骨肉。
本书作者希望以编程的实例和体验来传授编程的本质,而不是空谈编程理论。本书中所有的代码都用Python编程语言编写,同时本书也通过编程实例讲解了Python语言的所有重点。作者选择Python语言是因为Python已经成为世界上最通用的编程语言之一,它简单易学、功能强大。不同于市面上大部分的编程语言书,本书的特点是完整、系统地指导读者如何编程,读者在学习编程的同时,自然而然地熟练掌握Python语言。
在这个信息化的时代,无论是大数据、物联网,还是人工智能等应用,它们已经深入到千家万户的日常生活中,因此我们所有人都需要学习编程。因为只有学习了编程,我们才能对信息社会有真实的认知,而不会一直认为它是个神秘的事,甚至陷入人云亦云的窘境中。正是由于认识到编程教育的重要性,政府在2017年颁布了相关文件,计划逐步将编程教育纳入中小学的课程体系中。
为什么编程应该纳入课程体系中呢?其实编程本身具有更深层的教育意义。从中小学教育开始,这几十年来,学校所教授的必修课程,包括数学物理化学生物等,都是告诉学生我们所知道的宇宙万物的一些道理,也就是一些我们所发现或观测到的事实(facts)。不管是数学的公式、定理的证明,还是物理的规律、化学的反应等,都是facts。在我们所传授的知识体系中严重缺乏对创新能力和解决问题能力的培养,而编程过程中对每一个程序的设计和实现,都是从无到有,也就是说,写程序的过程就是创新的过程。学习编程不仅可以学习如何解决问题,还可以更进一步地学习如何有效地解决问题。而这些能力的培养恰恰被我们的传统教育忽视了,因此有必要将编程纳入所有学生必修的知识和技能范围内。人类社会的变化是如此迅速,相对应地,我们的教育也应该与时俱进。
编程要怎么学呢?市面上有许多以讲解某一种计算机语言为目标的书,例如Python语言学习、Java语言编程、C语言教程等。作者从事编程与计算机科学领域的相关教学已有20余年,深感通过学习某种编程语言来学习编程是个错误的方式。这种方式常会使学生们陷入对某一种编程语言细枝末节的学习中,妨碍学生了解和体会编程的核心思想与本质。就算学生努力记住了某种编程语言的流水账细节,那又如何呢?在这种学习方式下,很可能使培养编程能力和理解能力变得更加困难。就算考试取得高分,难道就能证明学生已经拥有相应的编程能力吗?这样的编程学习方式甚至让学生自以为已经学会了编程,其实,还差得远呢。
这些年来,作者深切地觉得我们缺少一本书一本以学习编程为主、学习编程语言为辅的书。我们需要这样的书来引导学生学习编程,并切实培养编程能力。本书是作者多年的心得汇集而成的,是一本教导编程原理和技巧的书,它以Python语言作为渡河之舟来辅助编程知识的学习和巩固。跟随本书的讲解,读者既可以学习编程知识,又可以同时掌握Python语言的使用。
问曰: 我是个文科生,学习编程对我有用吗?
当然有用。
我们可以从两方面来看。第一,英文有一个词叫作Logistics,意为组织计划、后勤管理。不管你是要开一家奶茶店,还是制作商品物流计划、组织一个活动、管理公司行政、计划一次旅行,或者规划孩子的学习,乃至家中的日常事务等,都属于Logistics的范畴。学习编程,可以直接增强组织、计划的能力,对自己的事业和家庭都有直接的益处,甚至教育孩子的功效也会上一个台阶。第二,学习编程让我们知道计算机是怎么运作的、机器中所谓的智能是怎么产生的等极为有用的知识,并且可以练习和活用这些知识。
希望通过本书的学习,读者能够跟上信息、智能时代的脚步。愿你们从学习这些知识中得到喜悦,所谓学而时习之,不亦乐乎,我想就是这个道理吧。
问曰: 读这本书之前需要什么预备知识?
只要读者有清晰的头脑和肯学习的心就可以了。
很多人都有个错误的观念,认为学习编程或算法需要高深的数学知识,其实不然。阅读本书只需要读者逻辑清楚,学过初中的数学知识。读者可以用下例来检查是否有足够的数学知识来阅读这本书。你是否知道一个正整数可以分解成若干个质数相乘?如15=35,24=2223。假如你知道这个数学道理,恭喜你,你完全有能力研读这本书了。本书的内容通俗易懂,目标是让一般读者都能通过本书学到编程的核心和技巧,同时也学会运用Python语言编程。
不仅一般读者会因为读本书而受益,学习计算机相关专业的读者也会因为研读本书而受益匪浅。希望读者能通过阅读本书喜欢上编程,感觉到编程是件具有艺术性的事,也是件可以作为休闲消遣的趣事。
问曰: 以何因缘写这本书?
因缘千丝万缕,互相影响。任何事的成就必定是因人、因时、因事、因地等因缘影响而成的。纵然因缘深广复杂,暂缕其大纲,可以概括如下:
第一,我在完成《计算机科学导论以Python为舟》一书之后,感觉我们还需要从软件编程的角度出发,再写一本书,它可以作为软件导论、程序设计课程的教材,或者是我之前撰写的计算机科学导论的姐妹书,用作计算机导论课程的辅助教材。
第二,我的女儿奕兰在上中学。我一直想要教她一些编程知识,但是没有看到任何合适的书可以引导她学习基础编程,所以我决定要写一本实际、有用、深入浅出、抓住重点的好书。对中学生(或任何人)而言,学习编程就一定要学真实代码的编写,因此我在本书中以Python为工具展示编程的美妙,这样读者就不需要浪费时间去学习一些非代码型的编程工具,这些工具是无法尽显编程的原理和技巧的。
第三,Python语言是一种简单易学、功能强大的语言,非常适用于编程基础的学习。已经有很多教学实践显示,初学者可以很快地掌握Python语言的基本功能,所以读者经过本书的学习,得以用Python语言练习各类计算思维方式和各种编程技巧。如今,Python语言已经被广泛运用到科学计算、网站建设、机器学习、游戏开发等方面,成为全世界软件开发工程师们使用率最高的语言之一。
第四,编程绝对不是学习了一种编程语言后就能掌握的知识。编程语言(例如C、Python、Java等)不过是编程的工具。学习语言是必需的,但是更重要的是学习如何编程,学习解决问题的思维方式,学习如何设计数据结构和程序的架构。也就是说,不仅要学习如何编写正确的程序,更要学习如何才能编写出可以快速执行并且缜密周全的程序。
第五,近年来,会下围棋的计算机打遍天下无敌手,人工智能(或称机器智能)变得异常红火。在媒体、商业的各种炒作下,似乎很多人都成了人工智能的专家,对一些热门话题侃侃而谈,这使得普通人对人工智能产生片面的憧憬或者惧怕。事实上,绝大部分人还是雾里看花、人云亦云罢了。大家一定要了解,人工智能不是个神奇的事,通俗地说,它不过是一些程序的执行结果和效果是人编写出来的程序的执行结果或效果罢了。人工智能要实现类似人类的逻辑推理、跨领域联想等功能,要达到那些电影情节所展示的境界,还有非常遥远的路要走。成为世界第一的围棋程序固然是惊人的,但是这个程序却不能玩其他的游戏。我希望大家能了解: 人工智能是由程序计算出来的,进而对人工智能产生比较清楚和冷静的认知。学习好编程后,相信大家对国家和社会关于人工智能的发展战略会有正确的态度,进而产生莫大的动力。这是我写本书的动机之一。本书特别有一章称为智能是计算出来的,就是讲解这些观念的。
问曰: 这本书的特色为何?
作者撰写这本书的目标是希望读者利用此书打好编程的基础、掌握编程的核心基础技巧、体会编程的美,同时也能熟练地用Python语言编程。具体而言,本书的特色可以归纳成下列几点:
本书的第一个特点是教授用计算机程序解决问题的思维和技巧(或称为计算思维)。内容由浅入深、清楚易懂。读者们可以从书中学习到用编程解决问题的基本思维方式:
(1) 逻辑思维的能力;
(2) 组织架构的能力;
(3) 循环计算的能力;
(4) 递归求解的能力。
我们用以下例子来做解释(在第1章中有多个例子及详细的解释)。
问题描述: 编写一个程序,计算出一组数字的总和。
当我们面对这样的问题时,要如何着手编程来解决问题呢?
(1) 首先要建立解决问题的基本思路,我们称之为算法。就是将这些数一个不漏地加起来,在这个把数加起来的过程中,既不能重复也不能遗漏任何一个数。这种既不重复也不遗漏地抓取一堆数字中的每个数字的过程称为遍历。
(2) 组织基本数据结构。要遍历一堆数字,首先要设计一个数据结构,将这堆数字保存起来,并且使得程序能方便地遍历它们,这样才能把这些数字一个个加起来。对于这个问题,最简单的数据结构就是用一个列表结构把这堆数字存储起来。
例如,在下面所列的Python程序遍历加起来中就有一个列表结构在程序中用变量L表示其中存储了需要相加的5个数字 [100,-100, 2, 10, 8]。Python语言用[ ]来表示列表结构,其中所保存的对象被称为元素,列表就是个有序的元素集合。这种列表结构非常有用,本书会对其做详细介绍。我们的程序可以用一种十分简单的方式获取列表中的任意元素。我们用L[索引]来代表列表L中任意位置的元素。Python中的序列编号都是从0开始,那么L[0]代表了列表的第一个元素,在此例中就是数字100。以此类推,L[1]指向L中的第二个元素-100。L[2]指向第三个元素2,L[3]指向10, L[4]指向8。有了数据结构后,我们的程序就可以累加列表L中的所有数字。
(3) 构建循环计算。Python程序遍历加起来用for语句做循环计算,把列表L里的元素一一累加到变量Sum里。这个Sum变量称为累积变量,重点是累积变量的初始值要设为0,并且必须在循环开始执行之前完成初始赋值,也就是Sum=0。
我们在Python程序遍历加起来中还定义了一个add_all L函数。Python语言用def这个关键字来定义一个函数,在此称为add_all L函数,括号中间的变量会传入函数中,此变量称为参数。函数可以说是部分的程序,也就是说,一个程序可以由多个函数组成。所以编写程序的本质,其实就是将原来的问题分解为多个小问题,再编写函数来解决这些小问题。本程序很简单,只有一个函数add_allL,作用是将所传参数L中的所有元素加起来,最后将其总和Sum作为返回值返回(用return关键字返回)。 函数print是Python固有的函数,功能是把print括号中的结果在屏幕上显示出来。至此,各位读者只需大概了解编程即可,详细的解释请阅读本书前两章。
#遍历加起来行首是符号#,代表这行是注释
L=[100,-100, 2,10, 8]
def add_allL:
Sum=0
for e in L:
Sum=Sum e
return Sum
printadd_allL
相同的计算思维和方式,也可以应用到其他问题上。再举例说明。
问题描述: 在一堆的数字中,找到其中的最小值。
下面是Python的程序遍历找最小值。Min变量作为累积变量,它的初始值设为L[0]。然后Min与L中所有的元素一个个地比较,一旦找到比当前Min小的值就将Min赋值为新的数。遍历结束后,Min必定保存L中最小的元素。
#遍历找最小值
L=[100,-100, 2,10, 8]
def find_minL:
Min=L[0]
for e in L:
if e Min: Min=e
return Min
本书第二个特点是强调递归求解的思维。
作者有30多年的编程经验、20多年的教学经验,深以为所有同学一定要尽早熟悉递归求解的思维方式。递归求解的方式是将大问题分解成同质的小问题,大问题的解决是由这些小问题的解决构建而成的。大问题与小问题是同质关系,都是用相同函数的代码来解决,只是参数不同罢了,所以解决大问题时的函数(有较大的参数)会调用同名称的函数(有较小的参数),这种方式称为递归求解。目前,市面上很少有书强调递归求解。本书再三强调递归求解思维的重要性,在第4~6章中展示并解释了大量的例子来让读者熟悉递归求解的思维。只有熟悉了递归思维后,读者才会从一个编程的工匠升华成编程的艺术家,才会体会到这种解决问题思维的简单、明晰和美丽。本书的第8章主要讲解编程的核心算法,其内容全部基于递归求解的思维。读者一定要与递归求解思维成为好朋友,而作为好朋友的唯一方式就是要多亲近它、理解它、熟悉它。
许多同学学习编程时,没有熟悉递归求解的思维方式,所以编程的水平很难上一个台阶。多年以来,看到许多要毕业的学生如此,许多研究生也是如此,我很难过。我觉得是我们这些老师的错。可能很多教编程的老师自己都不熟悉递归求解的思维,这不是误人子弟吗?
我用前面的例子将列表中的所有数加起来为例,让读者初步体会下递归求解的思维方式。
递归求解的思维方式: L中元素的总和等于第一个元素(L[0]) 加上 L剩下元素的总和,见Python程序递归加起来。是不是很简单?定义一个函数add_r1L,其返回值是L中所有元素的总和。这个总和就是L[0] add_r1L[1:],其中L[1:]代表L从L[1]开始到最后元素的列表。所以这个新的列表参数比较小,比原来的L少了第一个元素,重新调用add_r1函数。每一次调用,参数都会减少一个,一直到只剩下一个,则传回这个值。我们用lenL(Python的固有函数)来检查参数列表的长度。所谓递归,是指函数内调用函数自身的方式(参数不同)。所以我们要算L的总和,递归的方式是算L[去掉第一个元素]的总和加上L[0]。这是多么简单易懂的方式!
#递归加起来
def add_r1L:
if lenL==1: return L[0]
return L[0] add_r1L[1:]
将大问题分解成小问题的方式有很多种。我们也可以用另外一种递归方式来求解二分合并法。先将L分成两部分,再将返回值合并起来。所以对L求总和,就等于L[前半部]的总和加上L[后半部]的总和。在下面的Python程序递归二分求和法中,L[0:lenL2]代表L的前半部列表,L[lenL2:]代表L的后半部列表。这个程序与前面的程序都是用递归思维来求解的。而这个程序的好处在于,在多核的情况下,求L前半部的总和与求L后半部的总和可以并行计算。
#递归二分求和法
def add_r2L:
if lenL==1: return L[0]
return add_r2L[0:lenL2] add_r2L[lenL2:]
本书的第三个特点是以简洁的方式使读者熟练掌握Python语言。
Python语言已经成为世界上软件工程师们使用最多的语言之一。市面上有不少学习Python语言的书,但是许多都过于烦琐。本书整理出Python语言最重要的知识点,让读者在最短的时间熟悉Python语言的编程。第3章深谈Python函数、数据类型、输入输出和文件读写等重要知识,以及容易犯的错误。第7章讲解Python的面向对象的编程思维和技巧,同时讲授小乌龟画图的技巧。通过本书的学习,读者会自然而然地熟悉Python语言的编程,将来也更容易学习其他语言的编程,例如C、C、Java等。
本书的第四个特点是讲解了大量的实例。第1、2章展示了许多基本的编程例子和循环计算的例子。第3章针对Python语言的特性,讲解了大量例子和作者的Python使用经验。第4章展示了许多基本递归求解的例子。第5章讲解了比较复杂的各类递归求解的例子,其中包含二分法、求最大公因数、线性方程组求解、排序和排列组合求解等问题。第6章智能是计算出来的中的许多例子非常有趣,都是展示计算机是如何表现出智能的,其中包括小老鼠走迷宫、过河问题、AB猜数字游戏、24点游戏、最后拿牌就输等智能游戏,这些编程的例子展示出机器智能是如何被计算出来、如何能战胜大多数玩家的。第7章讲解面向对象编程的思路,展示小乌龟画图的技巧,其中有大量画图和动画的例子。第8章讲解编程的核心深搜方式,重点在于不能产生无限循环的搜索。所谓过河问题,是指在河的一边有一些东西,彼此可能相克

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.