python教材答案程序设计导论_【笔记】《程序设计导论Python语言实践》

2017年10月6日

终于算完了,趁着十一草草看完,性价比不高不低吧,有些困惑的问题得到了解决所以还是很值得的,尤其是可变变量那块。数据结构和算法一章最为粗糙,计划换本专门的书看。

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

记录一些程序设计/Python中的新知识或比较重要的理念

目录

基本元素

函数和模块

面向对象的程序设计

算法和数据结构

第一章 程序设计的基本原色

1.控制台中运行Python文件

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

运行无输入的Python文件

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

sys.argv[1]作输入

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

input作输入

2.Python程序开发流程

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Python程序开发流程

3.使用分号(;)可以在一行书写多条语句,不建议使用

4.SyntaxError:编译错误

5.数据类型:一种数据类型是一系列值以及为这些值定义的一系列操作方法的集合

6.字面量(Literal)_数据类型的值;标识符(Identifier)大小写敏感;常量(Constant variable)约定全大写

7.Python中所有的数据都表示为对象及对象之间关系

8.+号连接字符串进行字符串拼接

9.数据类型显示变换:str(),int(),float()

10.Python赋值过程中的绑定关系!!!【后边的列表更为明显】

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Paste_Image.png

11.Python语言中,int的取值范围可以为任意大

12.优先级:算数>比较>布尔;not>and>or

13.math.log()默认底数为自然常数e

14.Python内部采用Unicode编码存储

15.Python用三个引号表示多行字符串

16.Python的余数和被除数同号,实现b*(a//b)+a%b==a

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

负数除/余

17.应当避免比较两个浮点数的相等性

18.round()函数做四舍五入。实际上是四舍六入五成双

19.id(a);type(a);repr(a);分别取地址、类型和值

20.Python支持任意长度的链式比较运算、任意长度的链式赋值语句

21.Python语言中,语句块取决于缩进的空白字符的个数,通常采用4个空格缩进

22.i+=1 √

23.应用实例:①调和数计算;②牛顿法求平方根;③数制转换;④蒙特卡洛模拟;⑤整数的因子分解;

24.多行书写:括号内直接换行;无括号行位加反斜杠

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

多行书写

25.Python支持break,continue,pass;不支持switch,goto;【path用于限制是否“通过”继续执行】

26.while可以实现任何循环,for语句只能实现固定计数的循环

27.数据结构:是一种用于计算机程序处理的数据组织方式

28.“差一错误”(off-by one error),表示因数组索引从0开始而引起的超出索引错误

29.别名:当两个变量指向同一个对象时,则互为“别名”

简单说即——x、y引用同一个数组,x修改数组,则y也会改变

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

别名

30.数组的复制操作——数组切片。y=x[:],简洁,开销大

31.数组的4个核心操作:创建数组、索引访问、索引赋值、迭代遍历

32.厄拉多塞素数筛选法(Sieve of Eratosthenes),P118

33.数组的负数下标,a[-i]=a[len(a)-i]

34.a[i:j]=a[i,j),左闭右开

35.随机冲浪模型(randome surfer model),P187,页面排名(the page's rank),马尔科夫链(Markov chain)

36.补:条件/循环等程序块的缩写,可以直接追加到冒号同行后面

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

第二章 函数和模块

1.在计算任务中,任何时候只要可以清晰地分离任务,则建议使用函数分离任务

2.函数定义

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

函数定义

3.函数定义位置必须位于调用该函数的全局代码之前。∴Python程序结构依次为①import;②函数;③全局

4.函数的副作用,指函数内产生的输入、输出、改变系统状态情况;应尽量避免

5.多态性polymorphism,同名不同参

6.不可变数据类型:int float str bool,对于不可变对象的修改,看似改了值,实际上创建了新的对象

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

整数的不可变性

7.函数的形参、实参互为别名

8.一个以数组为参数,对数组进行修改的函数,其修改的是数组本身而不是副本

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

数组为参数

9.Python语言不支持函数重载的编程语言,通常使用默认参数来实现

10.Python在函数定义时对默认参数只求值一次,并不是每次调用都求一次

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

默认参数

11.Python程序可以看做是一系列文件,每个文件是一个独立的模块,每个模块包含若干函数

12.模块module:模块包含可被其他程序调用的函数;客户端client:客户端是调用其他模块中的函数的程序

13.Python语言的传统是把测试代码放在名为main()的函数中

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Python模块测试

14.Python的import语句会执行导入模块中的所有全局代码(包括函数定义),所以模块中不能遗留全局代码,采用main()的方法进行测试,即“单元测试”

15.模块设计的指导性原则:为客户端提供需要的函数,不要包含其他多余的内容

16.按照惯例,使用下划线开始的函数名作为私有函数,表示不应直接调用这个函数(实际可以做到)

17.随机过程的迭代案例:①谢尔宾斯基三角形(Sierpinski triangle);②巴恩斯利蕨(Barnsley fern);

18.第一次导入模块时,Python编译代码并把结果保存到.pyc文件中,再次调用无需重新编译

19.递归案例:①欧几里得法求最大公约数;②汉诺塔问题;③格雷码;④递归图形H-树;⑤布朗桥

20.使用递归代码创建的数组会占用大量内存

第三章 面向对象的程序设计

1.在一个计算中,当数据和相关的计算任务可以清楚地分开时,则必须分开

2.定义新的数据类型并处理包含数据类型值得对象的能力成为数据抽象(data abstraction)

3.函数与方法类似,函数调用通常使用一个模块名,而方法调用使用变量名

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

函数与方法

4.一个对象具有三个标准属性:标识、类型、值(状态)

标识(identity):其在计算机内存中的存储位置,唯一标示该对象

类型(type):对象类型

值(value):对象当前表示的数据类型的值

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

对象标准属性

5.按惯例,内置数据类型以小写字母开始,而用户自定义数据类型以大写字母开始

6.没有任何引用指向的对象,成为孤立对象(Orphaned object),系统会自动重用其占据的内存

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

孤立对象

7.其他程序员手动操作内存管理时,忘记释放孤立对象所占据内存空间的错误成为内存泄漏(Memory leak)

8.不允许在类/数据类型中定义两个同名的方法,重载使用默认参数

9.API,应用程序编程接口是所有客户端之间的契约。

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

API

10.使用类来实现一个数据类型,三个部分:一个构造函数、若干实例变量、若干方法

构造函数init(),方法potentialAt(),内置函数str(),测试函数main()

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

类示例

11.可使用init()作为构造函数,只能在其中定义和初始化实例变量,返回指向新对象的一个引用,self参数指向新建对象

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

构造函数

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

创建/初始化对象过程

12.方法中的变量包括——实例变量、参数变量、局部变量

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

方法

13.海龟绘图(Turtle graphic)递归图形:科赫曲线(Koch curve)、等角螺旋(Spira mirabilis)、布朗运动(Brownian motion)、曼德布洛特集合(Mandelbrot set)

14.将客户端和实现分离开从而隐藏信息的过程称为“封装”——使用一个数据类型无需理解其具体实现——使用一个程序替代另一个程序而无需修改客户端代码

15.未使用封装引起的问题案例:Y2K问题、邮政编码问题、IPv4和IPv6

16.初始化对象的参数为一个可变对象时(如数组),应在初始化时进行拷贝(如self._c=a[:]),否则客户端能绕过对象修改数组

17.Python的内置数据类型元组tuple,创建之后其元素不可被修改,可以使用元组组包、元组解包

18.OOP,①封装:黑盒;②多态:单接口、多方法;③继承:获取另一个对象的属性的过程

19.特殊方法,以内置函数为例,当客户端调用str(x)时,会先看x对象有没有str()方法,并调用之

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

算术运算符

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

等性运算符

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

比较运算符

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

内置函数

20.引用相等:is/is not ,表示引用地址相等;对象相等:==/!=,表示值相等,如果有eq()方法的话

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

等性对比

21.Python中一切皆对象,函数也是,函数可作为函数的参数和返回值

22.异常时程序运行时发生的破坏性事件,通常表示一种错误。

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

抛出异常

23.断言时在程序某个位置确定应该为True时的一个布尔表达式,通常用于调试,默认开启,可关。

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

抛出断言

第四章 算法和数据结构

1.增长量级

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

增长量级

2.Python可变数组的扩容机制——以倍增和减半策略保证可变数组的25%~100%的使用量

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

Python可变数组

3.摊销分析,对常量型操作的总成本除以操作次数得到一个常量,是为摊销分析

4.Python字符串和数组相似,区别在于——字符串是不可变对象

77d8b0888b12?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

字符串和字符串数组

5.Python灵活,带内存消耗大,最重要的功能特征之一就是内存分配系统,设计目标是减轻管理内存的繁重工作

6.缓存,Python为一个值仅创建一个对象拷贝,包括True、False、[-5,256]

7.调用一个函数时,系统从栈(stack)中分配函数所需内存,用于函数的局部变量;创建一个对象时,系统从堆(heap)中分配内存。

8.每个用户自定义类型的对象可能消耗大量的内存。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值