编程导论——以Python为舟
全新正版 急速发货
¥
52.3
7.5折
¥
69.8
全新
库存3件
作者沙行勉
出版社清华大学出版社
ISBN9787302505976
出版时间2018-09
装帧平装
开本16开
定价69.8元
货号25347916
上书时间2024-12-11
商品详情
- 品相描述:全新
- 商品描述
-
前言
前言
各位读者想要学习编程吗?不管你有没有编程基础,这本书都会满足你的需求。本书将会带领读者由浅入深地学习编程,通过大量有趣的编程问题以及对实例的分析、运用和解释,培养读者解决问题的能力(也就是计算思维能力),同时通过这些有趣的实例来指导读者学习如何具体地组织数据结构、构建各类函数与程序片段等编程技巧。计算思维的具体表现形式是算法,可以说,算法是程序的精神,而函数与数据结构是算法的具体实现,或者说是程序的“骨肉”。编程者需要兼顾程序的精神与骨肉。
本书作者希望以编程的实例和体验来传授编程的本质,而不是空谈编程理论。本书中所有的代码都用Python编程语言编写,同时本书也通过编程实例讲解了Python语言的所有重点。作者选择Python语言是因为Python已经成为世界上通用的编程语言之一,它简单易学、功能强大。不同于市面上大部分的编程语言书,本书的特点是完整、系统地指导读者如何编程,读者在学习编程的同时,自然而然地熟练掌握Python语言。
在这个信息化的时代,无论是大数据、物联网,还是人工智能等应用,它们已经深入到千家万户的日常生活中,因此我们所有人都需要学习编程。因为只有学习了编程,我们才能对“信息社会”有真实的认知,而不会一直认为它是个“神秘”的事,甚至陷入“人云亦云”的窘境中。正是由于认识到编程教育的重要性,政府在2017年颁布了相关文件,计划逐步将编程教育纳入中小学的课程体系中。
为什么编程应该纳入课程体系中呢?其实编程本身具有更深层的教育意义。从中小学教育开始,这几十年来,学校所教授的必修课程,包括“数学”“物理”“化学”“生物”等,都是“告诉”学生我们所知道的宇宙万物的一些道理,也就是一些我们所发现或观测到的事实(facts)。不管是数学的公式、定理的证明,还是物理的规律、化学的反应等,都是facts。在我们所传授的知识体系中严重缺乏对创新能力和解决问题能力的培养,而编程过程中对每一个程序的设计和实现,都是从无到有,也就是说,写程序的过程就是创新的过程。学习编程不仅可以学习如何解决问题,还可以更进一步地学习如何有效地解决问题。而这些能力的培养恰恰被我们的传统教育忽视了,因此有必要将“编程”纳入所有学生必修的知识和技能范围内。人类社会的变化是如此迅速,相对应地,我们的教育也应该与时俱进。
编程要怎么学呢?市面上有许多以讲解某一种计算机语言为目标的书,例如Python语言学习、Java语言编程、C语言教程等。作者从事编程与计算机科学领域的相关教学已有20余年,深感通过学*种编程语言来学习编程是个错误的方式。这种方式常会使学生们陷入对某一种编程语言细枝末节的学习中,妨碍学生了解和体会编程的核心思想与本质。就算学生努力记住了某种编程语言的流水账细节,那又如何呢?在这种学习方式下,很可能使培养编程能力和理解能力变得更加困难。就算考试取得高分,难道就能证明学生已经拥有相应的编程能力吗?这样的编程学习方式甚至让学生自以为已经学会了编程,其实,还差得远呢。
这些年来,作者深切地觉得我们缺少一本书——一本以学习“编程”为主、学习编程语言为辅的书。我们需要这样的书来引导学生学习编程,并切实培养编程能力。本书是作者多年的心得汇集而成的,是一本教导编程原理和技巧的书,它以Python语言作为渡河之舟来辅助编程知识的学习和巩固。跟随本书的讲解,读者既可以学习编程知识,又可以同时掌握Python语言的使用。
问曰: 我是个文科生,学习编程对我有用吗?
当然有用。
我们可以从两方面来看。,英文有一个词叫作“Logistics”,意为组织计划、后勤管理。不管你是要开一家奶茶店,还是制作商品物流计划、组织一个活动、管理公司行政、计划一次旅行,或者规划孩子的学习,乃至家中的日常事务等,都属于“Logistics”的范畴。学习编程,可以直接增强组织、计划的能力,对自己的事业和家庭都有直接的益处,甚至教育孩子的功效也会上一个台阶。第二,学习编程让我们知道计算机是怎么运作的、机器中所谓的“智能”是怎么产生的等极为有用的知识,并且可以练习和活用这些知识。
希望通过本书的学习,读者能够跟上信息、智能时代的脚步。愿你们从学习这些知识中得到喜悦,所谓“学而时习之,不亦乐乎”,我想就是这个道理吧。
问曰: 读这本书之前需要什么预备知识?
只要读者有清晰的头脑和肯学习的心就可以了。
很多人都有个错误的观念,认为学习编程或算法需要高深的数学知识,其实不然。阅读本书只需要读者逻辑清楚,学过初中的数学知识。读者可以用下例来检查是否有足够的数学知识来阅读这本书。你是否知道一个正整数可以分解成若干个质数相乘?如15=3×5,24=2×2×2×3。假如你知道这个数学道理,恭喜你,你完全有能力研读这本书了。本书的内容通俗易懂,目标是让一般读者都能通过本书学到编程的核心和技巧,同时也学会运用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_all(L),作用是将所传参数L中的所有元素加起来,后将其总和Sum作为返回值返回(用return关键字返回)。 函数print()是Python固有的函数,功能是把print括号中的结果在屏幕上显示出来。至此,各位读者只需大概了解编程即可,详细的解释请阅读本书前两章。
#遍历加起来行首是符号#,代表这行是注释
L=[100,-100, 2,10, 8]
def add_all(L):
Sum=0
for e in L:
Sum=Sum e
return Sum
print(add_all(L))
相同的计算思维和方式,也可以应用到其他问题上。再举例说明。
问题描述: 在一堆的数字中,找到其中的小值。
下面是Python的程序“遍历找小值”。Min变量作为累积变量,它的初始值设为L[0]。然后Min与L中所有的元素一个个地比较,一旦找到比当前Min小的值就将Min赋值为新的数。遍历结束后,Min必定保存L中小的元素。
#遍历找小值
L=[100,-100, 2,10, 8]
def find_min(L):
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_r1(L),其返回值是L中所有元素的总和。这个总和就是L[0] add_r1(L[1:]),其中L[1:]代表L从L[1]开始到后元素的列表。所以这个新的列表参数比较小,比原来的L少了个元素,重新调用add_r1()函数。每一次调用,参数都会减少一个,一直到只剩下一个,则传回这个值。我们用len(L)(Python的固有函数)来检查参数列表的长度。所谓“递归”,是指函数内调用函数自身的方式(参数不同)。所以我们要算L的总和,递归的方式是算L[去掉个元素]的总和加上L[0]。这是多么简单易懂的方式!
#递归加起来
def add_r1(L):
if len(L)==1: return L[0]
return L[0] add_r1(L[1:])
将大问题分解成小问题的方式有很多种。我们也可以用另外一种递归方式来求解——二分合并法。先将L分成两部分,再将返回值合并起来。所以对L求总和,就等于L[前半部]的总和加上L[后半部]的总和。在下面的Python程序“递归二分求和法”中,L[0:len(L)//2]代表L的前半部列表,L[len(L)//2:]代表L的后半部列表。这个程序与前面的程序都是用递归思维来求解的。而这个程序的好处在于,在多核的情况下,求L前半部的总和与求L后半部的总和可以并行计算。
#递归二分求和法
def add_r2(L):
if len(L)==1: return L[0]
return add_r2(L[0:len(L)//2]) add_r2(L[len(L)//2:])
本书的第三个特点是以简洁的方式使读者熟练掌握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章讲解编程的核心—深搜方式,重点在于不能产生无限循环的搜索。所谓过河问题,是指在河的一边有一些东西,彼此可能相克
导语摘要
本书以大量的编程实例与作者多年编程实践的体会来揭示编程的本质,系统性地指导读者如何编程。书中所有代码都用Python语言编写,通过编程实例讲解Python语言的所有知识点,使读者在掌握编程思维和技巧(逻辑思维能力、计划构建能力、循环计算能力、递归求解能力等)的同时,自然而然地熟练掌握Python语言。本书既适合作为“程序设计基础”“编程导论”“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年起任国家千人计划特聘专家,2012—2017年任重庆大学国家特聘教授和计算机学院院长。现全职任上海华东师范大学终身特聘教授。
至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布尔
— 没有更多了 —
以下为对购买帮助不大的评价