《上海交通大学python程序设计课程pptch1资料》由会员分享,可在线阅读,更多相关《上海交通大学python程序设计课程pptch1资料(44页珍藏版)》请在金锄头文库上搜索。
1、程序设计思想与方法,2,2,2,信息,任庆生 电信楼3523 34204420 ren-qs ftp:/:990/ren-qs/教学/程序设计/ 上机时间:单周周四上午,电信楼4-311 助教:待定,3,3,教材和参考书,教材 程序设计思想与方法问题求解与计算思维 高教出版社, 2013. 参考书 Python Programming: An Introduction to Computer Science. (电子版) How to Think Like a Computer ScientistLearning with Python.(电子版),4,4,考核方式,期末考试 笔试, 占最终成
2、绩的50% 平时作业 编小程序, 邮件或ftp上传给助教, 占最终成绩的20% 大作业 编一个大程序, 期末提交, 占最终成绩的30%,4,第1章 计算与计算思维,5,计算机:硬件(1),6,计算机:硬件(2),中央处理器(CPU):执行指令. 每条指令只能完成简单的操作! 例如:加法, 比较, 将数据从一个内存单元移到另一单元, etc. 存储器:存储信息(程序和数据). 主存:CPU能直接访问,速度快但易失. 次级存储器:速度慢但持久. 输入/输出设备:人机交互,7,7,8,8,8,计算机:软件,计算机是信息处理机器,信息处理过程由预定的程序控制. 单条指令是做不了什么事情的,需要大量指令
3、组成一个逐步执行的指令序列程序. 各种程序统称为计算机软件. 没有软件的计算机毫无用处.,8,计算,计算:利用计算机执行程序来解决问题. 不是狭义的数学计算! 程序使得简单指令完成复杂任务. 问:只会加法的小学生能完成乘法运算任务吗? 答:能!关键是编写合适的程序 在纸上写下0,记住结果; 给所记结果加上第1个n,记住结果; 给所记结果加上第2个n,记住结果; 给所记结果加上第m个n,记住结果; 报告结果(即mn),9,9,通用计算机,计算机执行一个程序即可实现一个功能;换着执行不同的程序即可实现不同的功能. 通用计算机:可以加载不同的程序来执行. 与一些电器的比较:电视机功能单一,洗衣机则功
4、能较多(可加载多种洗涤程序),现在的手机则功能更多,基本上就是计算机.,10,计算机科学,并非研究计算机! 计算机之于计算机科学家正如望远镜之于天文学家. (E. W. Dijkstra) CS研究计算的基础,实现与应用. 例如,CS的一个基本问题:什么是可计算的? 本课程的学习目标:像计算机科学家一样思考.,11,11,程序设计,计算的关键是程序设计(编程). 给定一个问题,利用计算机支持的简单操作,设计出一个操作步骤的序列,计算机执行这个序列从而解决问题. 学习程序设计的好处: 做计算机的主人 提高问题求解能力 本身是很有乐趣的智力活动,12,12,程序设计语言,问:用什么语言告诉计算机做
5、什么? 答:用精确无歧义的程序设计语言. 精确的语法和语义 有不同层次的程序设计语言 计算机的“母语“:机器语言 例如: 0000010000000001.是Intel8086能理解的一条指令. 将机器语言用助忆符表示:汇编语言 上例即: ADD AL,1.需要汇编器处理后机器才懂. 适合人用的语言:高级语言 如: x = y + 1. 需要编译器或解释器翻译后机器才懂.,13,13,编译vs解释,思考:为什么高级语言程序具有可移植性,即同一个程序 可以在不同厂商的计算机上执行?,14,算法与编码实现,程序设计 先用非形式化的语言将问题求解步骤表达出来算法; 伪代码 再用形式化的编程语言将上述
6、算法实现程序. 代码,15,算法例:欧几里德算法,欧几里德算法:求最大公约数. 输入:自然数a、b 输出:a、b的最大公约数 步骤: 第1步:令r为a除以b所得余数 第2步:若r=0,则算法结束,b即为答案;否则置ab,br,转到第1步.,16,对算法的要求,算法的每个步骤必须是明确的,可行的. 不明确:“在菜中放点盐“ 不可行:“用青菜豆腐做出龙肝凤髓的美味“ 每个步骤不必是最底层的琐细步骤,可以是组合的高级步骤.如:“焯水“ 算法的步骤必须在有限时间内完成. 我们说的计算,即是指“算法计算“:用明确可行的基本步骤组成的序列来解决问题.,17,18,18,18,计算思维,计算思维(compu
7、tational thinking)是计算机科学家利用计算机(计算过程)解决问题时的思想和方法. 计算机科学(CS)是关于“计算”的科学. 如何像计算机科学家一样思考?,18,19,19,19,真的有计算思维吗?,人们在解决不同问题时有不同的思考方式 数学思维:解数学问题 工程思维:工程设计 形象思维:文学创作 计算思维:建立在计算机的能力与局限之上. 由于计算机的广泛应用,计算思维未来会成为人们的基本能力. 与阅读,书写,算术能力一样!,计算思维例:问题表示,问题的表示(建模) 抽象:将现实中的各种数量关系,空间关系,处理过程抽象为计算机的数据结构和控制结构 例如:温度数据抽象为数值还是文字
8、? 不同抽象层次 问题表示得合适与否直接影响问题的解法的发现和效率,20,计算思维例:算法设计,化难为易:分解,约简,嵌入,转换,模拟. 分治法,递归法,贪心法,动态规划. 递归地思考 并行处理,21,21,计算思维例:编程实现,类型系统与类型检查 结构化与模块化的思考 编程范型:过程式,面向对象,函数式,. 程序美学,系统设计的简洁与优雅,22,22,计算思维例:计算理论,算法复杂度分析 问题的解法是有效率差别的 有些问题是难解的 寻求近似解 问题的可计算性 有些问题是不可计算的,23,23,计算思维例:其他,预取和缓存 对最坏情况的预防,保护,恢复 启发式推理 时空等不可兼得要素的权衡 ,
9、24,计算思维的特点,是概念化思考,而非编程 是基本思考能力,而非机械的套用 是人的思考,而非计算机 与数学思维和工程思维相结合 是思想,而非人造物 人人皆有,处处皆是,25,25,生活中的计算思维,算法:小学算术中的长除法 查找方法:查黄页是顺序翻找还是借助索引 排序:整理扑克牌 排队:先来先处理 预取与缓存:书包存放当天上课用的书 并行处理:烧菜 ,26,计算 + X,计算数学,计算几何,自动定理证明 计算物理学 计算化学 计算生物学,生物信息学 计算经济学 计算机艺术:电影特效,计算机作曲绘画书法 ,27,计算+X:十二五863计划,征集重大应用软件课题 聚变与裂变能源数值模拟 真实飞机
10、外型全流场和优化设计数值模拟 航天飞行器全飞行流域数值模拟 新药研发与蛋白质折叠数值模拟 真实感动漫渲染与创作 大型工程设备结构力学分析 复杂电磁环境数值模拟 新型材料设计与性能评估,28,28,本课程的定位,学习利用计算机解决问题的思想方法,应用于其他专业领域 不是程序设计语言课程! 编程是计算思维的实践 坏消息:学习编程语言需要掌握非常繁琐的细节 好消息:Python语言非常简单,易学易用 不是算法和数据结构课程! 会学习一些基本的知识,29,本课程的定位(续),30,计算机科学,程序设计语言,算法设计与分析,数据结构,理,化,生.,经,管,金融.,工程,数学,艺术,计算思维,可计算性理论
11、,30,Python语言,荷兰人Guido van Rossum于1980年代发明. 通用/跨平台/开源/自由(免费) 简单易学,高度的可读性 支持多种编程范型 编译+解释:源代码先编译成字节码,再解释执行 流行编程语言前10名之一. ,31,31,Python安装与运行,版本:教材和上课都采用Python 2.7 与最新的Python 3.x有不兼容的地方. 安装后,启动Python解释器 命令行 GUI,32,32,第一个程序:HelloWorld,交互方式 print “Hello, World!“ Hello, World! 本课程的教学中常用交互方式演示新语句 实际上很少用交互方式执
12、行程序 多次执行同一程序需要多次输入程序 多行语句无法一次性执行,33,33,第一个程序:HelloWorld,程序文件 将语句保存在纯文本文件hello.py中 四种执行方式 在IDLE中用Run Module菜单执行 双击hello.py文件图标 import hello C:Python27 python hello.py,34,print “Hello, World!“,34,程序实例,#convert.py # A program to convert Celsius temps to Fahrenheit # by: Susan Computewell def main(): ce
13、lsius = input(“What is the Celsius temperature? “) fahrenheit = (9.0/5.0) * celsius + 32 print “The temperature is “,fahrenheit,“ degrees Fahrenheit.“ main(),35,程序构件:数据,数据是被处理的信息 有不同类型的数据 字符串数据 print “Hello, World!“ 数值数据 print 3.1415,36,36,程序构件:变量,和数学类似:用一个名字表示可变的数据 数学中多用单字母,程序中多用单词/词组 标识符:Python命名
14、以字母或下划线开头,后跟0个或多个字母,数字,下划线.区分大小写字母. 合法: x xYz x_123 _ _ _w3 非法: 3q x-123 first name 良好的命名风格:有意义,风格一致,37,37,程序构件:变量,38,保留字,程序构件:表达式,表达式:能计算出一个值. 字面值: 3.14, “hello” 变量 数据+运算符(如 ) 2+3*4-5 运算符 不同类型的数据有不同运算 运算符有优先级 良好编程风格:用空格,括号增加表达式的可读性.,39,39,程序构件:语句,输出语句 我们用语句模板来给出正确用法 print print ,. 赋值语句 x = 3.14 pri
15、nt x * 10,40,40,程序构件:函数,多条语句构成一个整体,并命名 def greet(): print “Hello!“ print “Goodbye!“ greet() Hello! Goodbye! 习惯上为程序定义一个主函数main,41,41,程序构件:注释,程序中可以使用注释,用于解释变量用途,函数功能等等信息. # Author: John # Version: 1.0 def main(): 注释是给人看的,对程序执行没有作用,被编译器/解释器忽略. 良好的编程风格:多用注释!,42,42,程序实例,#convert.py # A program to convert Celsius temps to Fahrenheit # by: Susan Computewell def main(): celsius = input(“What is the Celsius temperature? “) fahrenheit = (9.0/5.0) * celsius + 32 print “The temperature is “,fahrenheit,“ degrees Fahrenheit.“ main(),43,End,44,