教材 陆朝俊 程序设计思想与方法讲义 参考资料 John M. Zelle

54
计计 计计计计 Python 计计计计 1 计计 计计计计 计计 Pytho n 计 1 计 计计计计计计计 计计计计计计 BP 计计计计计计计计 计计计 计计计 [email protected]. cn

description

教材 陆朝俊 程序设计思想与方法讲义 参考资料 John M. Zelle Python Programming: An Introduction to Computer Science http://openbookproject.net/thinkCSpy/ Python 学习手册 _ 第 3 版. 成绩 组成 考试 作业 出勤. 课程主要内容 解决可计算问题需要教会计算机如何解决问题 如何教计算机解决问题 了解计算机有哪些基本功能 因材施教,设计教学的过程 一门与计算机进行交流的语言. 对本课程的 定位 - PowerPoint PPT Presentation

Transcript of 教材 陆朝俊 程序设计思想与方法讲义 参考资料 John M. Zelle

Page 1: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错1

程序

计算思维

方法 Python

第 1 章 计算与计算思维

程序设计基础

BP

计算机与信息学院 数字媒体艺术系夏天 [email protected]

Page 2: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错2

什么是计算

什么是计算思

初识Python

程序排错

1

2 3

4

第 1 章 计算与计算思维

2

Page 3: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错3

• 教材–陆朝俊 –程序设计思想与方法讲义

• 参考资料–John M. Zelle–Python Programming: An Introduction to

Computer Science http://openbookproject.net/thinkCSpy/

–Python 学习手册 _ 第 3 版

Page 4: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错4

• 成绩组成–考试–作业–出勤

Page 5: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错5

• 课程主要内容–解决可计算问题需要教会计算机如何解决问题–如何教计算机解决问题

• 了解计算机有哪些基本功能• 因材施教,设计教学的过程• 一门与计算机进行交流的语言

Page 6: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错6

• 对本课程的定位–学习计算机科学解决问题的思想方法 , 应用

于其他专业领域–不是程序设计语言课程 !

• 本课程需要编程 , 以加深对计算思维的理解• 坏消息 : 学习编程语言需要掌握非常繁琐的细节• 好消息: Python 语言非常简单 , 易学易用

–也不是算法和数据结构课程 !• 当然会学习这方面的一些基本技术

6

Page 7: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错7

Lu Chaojun, SJTU 7

计算机科学

程序设计语言

算法设计与分析

数据结构

理 , 化 , 生 ...

经 , 管 , 金融 ...

工程

数学

艺术

计算思维

可计算性理论

Page 8: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错8

Transition Page

过渡页

8

什么是计算

什么是计算思

初识Python

程序排错

1

2 3

4

Page 9: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错9 计算1.1 什么是计算

• 1.1.1 计算机与计算

个人计算

云计算

超级计算

计算中心

移动计算

Page 10: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错10 计算1.1 什么是计算

• 1.1.1 计算机与计算• 2007 年 1 月《 Nature 》:《 Social Sciences: Life's A Game 》(社会科学:生活就是一场游戏)。

• 越来越多的人“生活”在 Cyber 世界中,人跟人之间的沟通越来越借助于机器

• 今天如果突然失去机器,世界将崩溃

Page 11: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错11 计算1.1 什么是计算

• 1.1.1 计算机与计算

主存储器

CPU

输入设备 输出设备

次级存储器

Page 12: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错12 计算

• 中央处理器 (CPU): 执行指令 .–每条指令只能完成简单的操作 !

• 例如 : 加法 , 比较 , 将数据从一个内存单元移到另一单元 , etc.

• 存储器 : 存储信息 ( 程序和数据 ).–主存 :CPU 能直接访问 , 速度快但易失 .–次级存储器 : 速度慢但持久 .

• 输入 / 输出设备 : 人机交互

Lu Chaojun, SJTU 12

Page 13: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错13 计算1.1 什么是计算

• CPU 、指令与程序–CPU–指令–指令集–程序–程序设计

Page 14: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错14 计算1.1 什么是计算

• 存储器–主存储器

• 保存正在运行的程序代码和数据• 关机后,内存的数据全部丢失

–次存储器• 比如硬盘

Page 15: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错15 计算

• 输入与输出设备–输入设备将人能理解的符号转换成计算机能

处理的符号。常用的输入设备有:键盘、鼠标、光笔等

–输出设备将计算机的输出转换成人能理解的输出。常用的输出设备有:显示器、打印机、音响设备等

Page 16: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错16 计算

Lu Chaojun, SJTU 16Lu Chaojun, SJTU 1616

• 计算机 : 软件–计算机是信息处理机器 , 信息处理过程由预定

的程序控制 .• 单条指令是做不了什么事情的 , 需要大量指令组成

一个逐步执行的指令序列-程序 .

–各种程序统称为计算机软件 .–没有软件的计算机毫无用处 .

Page 17: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错17 计算1.1 什么是计算

• 计算–计算 :利用计算机执行程序来解决问题 .

• 不是狭义的数学计算 !

–程序使得简单指令完成复杂任务 .•高斯算法

Page 18: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错18 计算1.1 什么是计算

• 计算–把大象放进冰箱里需要几步?

Page 19: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错19 计算1.1 什么是计算

• 计算机的通用性–计算机执行一个程序即可实现一个功能 ; 换着

执行不同的程序即可实现不同的处功能 .–请列举你熟悉的应用程序

Page 20: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错20 计算

• 计算机科学–并非研究计算机 !

• 计算机之于计算机科学家正如望远镜之于天文学家 . (E. W. Dijkstra)

–CS研究计算的基础 ,实现与应用 .• 例如 ,CS 的一个基本问题 : 什么是可计算的 ?

–本课程的学习目标 :像计算机科学家一样思考 .

Page 21: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错21 计算

• 程序设计–计算的关键是程序设计 ( 编程 ).

•给定一个问题 ,利用计算机支持的简单操作 , 设计出一个操作步骤的序列 , 计算机执行这个序列从而解决问题 .

–学习程序设计的好处 :• 做计算机的主人•提高问题求解能力• 本身是很有乐趣的智力活动

Lu Chaojun, SJTU 21

Page 22: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错22 计算

• 1.1.2 计算机语言–人与计算机进行交流的一种语言–为什么不用自然语言与计算机交互?

•精确的语法和语义•无二义性

–有不同层次的程序设计语言

Page 23: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错23 计算1.1 什么是计算

• 1.1.2 计算机语言–机器语言–汇编语言–高级语言

001000100000001110000010000100000010011000000010011000010000000100010000000000001111000000000000

>>>print 3*16+2Load R0,3Mul R0,16Load R1,2Add R0,R1Write R0Halt

Page 24: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错24 计算1.1 什么是计算

• 1.1.2 计算机语言–编译

• 将程序全部翻译成机器语言的程序,然后再执行。

main() {int i, s;i=1;s=0;

C compiler0110001011101001

Source program

Object program

Page 25: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错25 计算1.1 什么是计算

• 1.1.2 计算机语言–解释

源程序

解释系统(逐句解释、执行)

输入数据

输出结果

Page 26: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错26 计算

• 高级语言的特点–具备了一定的机器独立性,使用户可以专注

于解决问题的方法。但某些方面还是受到机器的限制

–为了解决移植性问题, ANSI 制订了一系列的标准

Page 27: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错27 计算1.1 什么是计算

• 1.1.3 算法–回想一下把大象放进冰箱的问题。

Page 28: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错28 计算

• 程序设计–先用非形式化的语言将问题求解步骤表达出

来——算法 ;•伪代码

–再用形式化的编程语言将上述算法实现——程序 .• 代码

Page 29: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错29 计算1.1 什么是计算

• 1.1.3 算法–欧几里德算法

• 输入:自然数 a,b• 输出: a,b 的最大公约数•步骤:

–第 1步:令 r为 a/b 的余数–第 2步:若 r=0,则算法结束, b即为答案;否则置 a<-

b,b<-r, 转到第 1步。

Page 30: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错30 计算

• 对算法的要求–算法的每个步骤必须是明确的 , 可行的 .

• 不明确 :" 在菜中放点盐 "• 不可行 :" 用青菜豆腐做出龙肝凤髓的美味 "• 每个步骤不必是最底层的琐细步骤 , 可以是组合的高级步骤 . 如 :"焯水 "

–算法的步骤必须在有限时间内完成 .–我们说的计算 ,即是指 " 算法计算 ": 用明确可

行的基本步骤组成的序列来解决问题 .

Page 31: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错31 计算

• 1.1.4 实现–算法 <> 程序

Page 32: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错32 计算思维

1.2 神奇的“合并形状”功能• 1.2 什么是计算思维

–计算思维:现代科技创新的基础之一

–计算思维最根本的内容,即其本质是抽象( Abstraction )与自动化( Automation )。

Page 33: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错33 计算思维

• 1.2 什么是计算思维–计算思维是计算机科学家利用计算机解决问

题时的思想和方法• 计算机科学是关于“计算”的科学• 计算思维建立在由人或机器执行的计算过程的能力

和限制之上–如何像计算机科学家一样思考 ?

Page 34: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错34 计算思维

• 真的有计算思维吗 ?–人们在解决不同问题时有不同的思考方式

• 数学思维 : 解数学问题•工程思维 :工程设计•形象思维 :文学创作• ......

–计算思维 :建立在计算机的能力与局限之上 .–由于计算机的广泛应用 , 计算思维未来会成为

人们的基本能力 .• 与阅读 ,书写 , 算术能力一样 !

Lu Chaojun, SJTU 34Lu Chaojun, SJTU 3434

Page 35: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错35 计算思维

• 1.2 什么是计算思维–计算思维的具体例子

• 问题表示• 算法设计• 编程技术• 可计算性与算法复杂性

Page 36: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错36 计算思维

• 计算思维例 : 问题的表示–问题的表示 (建模 )

•抽象 : 将现实中的各种数量关系 ,空间关系 , 处理过程抽象为计算机的数据结构和控制结构

– 例如 :温度数据抽象为数值还是文字 ?

• 不同抽象层次–问题表示得合适与否直接影响问题的解法的发现和效率

Lu Chaojun, SJTU 36

Page 37: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错37 计算思维

• 计算思维例 : 算法设计–化难为易 :分解 ,约简 ,嵌入 , 转换 ,模拟 ...–分治法 ,递归法 ,贪心法 , 动态规划 ...–递归地思考–并行处理

Lu Chaojun, SJTU 37

Page 38: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错38 计算思维

• 计算思维例 : 编程实现–类型系统与类型检查–结构化与模块化的思考–编程范型 : 过程式 , 面向对象 ,函数式 ,...–程序美学 , 系统设计的简洁与优雅

Lu Chaojun, SJTU 38

Page 39: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错39 计算思维

• 计算思维例 : 计算理论–算法复杂度分析

• 问题的解法是有效率差别的• 有些问题是难解的•寻求近似解

–问题的可计算性• 有些问题是不可计算的

Lu Chaojun, SJTU 39

Page 40: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错40 计算思维

• 计算思维的特点–是概念化思考 ,而非编程–是基本思考能力 ,而非机械的套用–是人的思考 ,而非计算机–与数学思维和工程思维相结合–是思想 ,而非人造物–人人皆有 , 处处皆是

Lu Chaojun, SJTU 40

Page 41: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错41 计算思维

• 生活中的计算思维–算法 :小学算术中的长除法–查找方法 :查黄页是顺序翻找还是借助索引–排序 :整理扑克牌–排队 :先来先处理–预取与缓存 :书包存放当天上课用的书–并行处理 :烧菜

• ……

Lu Chaojun, SJTU 41

Page 42: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错42 计算思维

• 计算 + X–计算数学 , 计算几何 ,自动定理证明–计算物理学–计算化学–计算生物学 , 生物信息学–计算经济学–计算机艺术 :电影特效 , 计算机作曲绘画书法–……

Lu Chaojun, SJTU 42

Page 43: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错43 计算思维

• 计算 +X:十二五 863 计划–征集重大应用软件课题

•聚变与裂变能源数值模拟•真实飞机外型全流场和优化设计数值模拟•航天飞行器全飞行流域数值模拟•新药研发与蛋白质折叠数值模拟•真实感动漫渲染与创作•大型工程设备结构力学分析•复杂电磁环境数值模拟•新型材料设计与性能评估

Lu Chaojun, SJTU 43

Page 44: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错44 Python

• 1.3 初识 Python• 本课程采用 Python 语言

–高级程序设计语言有很多种,据说 2008 年网上被引用最多的 10 个语言是 (按字母顺序 ): C , C++ , C# , Java , JavaScript , Perl, PHP , Python , Ruby , SQL

–下载 python 软件的地址• http://www.python.org/getit/ • python 2.7 版

44

Page 45: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错45 Python

• Python 安装与运行–版本 : 教材和上课都采用 Python 2.7

• 与最新的 Python 3.x 有不兼容的地方 .

–安装后 , 启动 Python 解释器• 命令行

• GUI

Lu Chaojun, SJTU 45

Page 46: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错46 Python

• 第一个程序 :HelloWorld–交互方式>>> print "Hello, World!"Hello, World!–本课程的教学中常用交互方式演示新语句–实际上很少用交互方式执行程序

• 多次执行同一程序需要多次输入程序• 多行语句无法一次性执行

Lu Chaojun, SJTU 46

Page 47: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错47 Python

• 第一个程序 :HelloWorld–程序文件

• 将语句保存在纯文本文件 hello.py 中

• 四种执行方式– 在 IDLE 中用 File->Run Module 菜单执行– 双击 hello.py 文件图标– >>> import hello – C:\Python27> python hello.py

Lu Chaojun, SJTU 47

print "Hello, World!"

Page 48: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错48 Python

• 数程序构件 : 数据–据是被处理的信息–有不同类型的数据

• 字符串数据>>> print "Hello, World!"• 数值数据>>> print 3.1415

程序构件 : 数据

Lu Chaojun, SJTU 48

Page 49: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错49 Python

• 程序构件 : 变量–和数学类似 : 用一个名字表示可变的数据

• 数学中多用单字母 , 程序中多用单词 / 词组–标识符 :Python 命名

• 以字母或下划线开头 , 后跟 0 个或多个字母 , 数字 ,下划线 . 区分大小写字母 .

合法 : x xYz x_123 _ __ _w3非法 : 3q x-123 first name

–良好的命名风格 : 有意义 , 风格一致

Lu Chaojun, SJTU 49

Page 50: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错50 Python

• 程序构件 : 表达式–表达式 : 能计算出一个值 .

• 字面值 : 3.14, “hello”• 变量• 数据 + 运算符 ( 如 )>>> 2+3*4-5

–运算符• 不同类型的数据有不同运算• 运算符有优先级

–良好编程风格 : 用空格 , 括号增加表达式的可读性 .

Lu Chaojun, SJTU 50

Page 51: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错51 Python

• 程序构件 : 语句–输出语句

• 我们用语句模板来给出正确用法print < 表达式 >print < 表达式 1>,< 表达式 2>,...

–赋值语句>>> x = 3.14>>> print x * 10

Lu Chaojun, SJTU 51

Page 52: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错52 Python

• 程序构件 : 函数–多条语句构成一个整体 , 并命名>>> def greet(): print "Hello!" print "Goodbye!">>> greet()Hello!Goodbye!

–习惯上为程序定义一个主函数 main

Lu Chaojun, SJTU 52

Page 53: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错53 Python

• 程序构件 : 注释–程序中可以使用注释 , 用于解释变量用途 , 函

数功能等等信息 .# Author: John# Version: 1.0def main(): ....

–注释是给人看的 , 对程序执行没有作用 , 被编译器 / 解释器忽略 .

–良好的编程风格 : 多用注释 !

Lu Chaojun, SJTU 53

Page 54: 教材 陆朝俊   程序设计思想与方法讲义 参考资料 John M.  Zelle

计算 计算思维 Python 程序排错54

谢谢!