《从Python开始学编程》第1~3章

第一章  用编程改造世界

第二章  先做键盘侠

第三章  过程大于结果


第一章 用编程改造世界

1.1 从计算机到编程

·冯.诺伊曼结构

。控制器:管理计算机其他部分的工作,决定执行指令的顺序,控制不同部件之间的数据交流

。运算器:进行运算的部件,进行+,—,*,/,与,或,非的运算,与控制器一起构成了CPU

。存储器:存储信息的部件(冯.诺依曼提出存储器不但要记录数据,还要记录所要执行的程序)

。输入设备:向计算机输入信息的设备,如键盘,鼠标,摄像头等

。输出设备:计算机向外输出信息的设备,如显示屏,打印机,音响等

1.2 所谓的编程,是做什么的

·封装:把执行特殊功能的指令打包成一个程序块,然后给这个程序块起个容易查询的名字。如果需要重复使用,则可通过名字调用

·封装代码的方式有很多种,根据不同的方式,写程序时要遵循特定的编程方式(eg:面向过程的C语言,面向对象的Java语言,面向函数的Lisp语言)(Python是一门多范式语言)

1.3 为什么学Python

从Python开始学习编程的好处:语法简单,模块丰富等

1.4 最简单的Hello Word

·print()函数:在屏幕上打印出字符,函数括号里的内容即要打印出来的字符,括号里的" "并没有打印在屏幕上,其作用是从print之类的程序文本中标记出普通字符,以免计算机混淆。也可以用' '替换" "

·注释

。注释:用一些文字来解释某一段程序,在Python的程序文件中,每一行中从#开始的文字都是注释,注释的内容并不会被当作程序执行

。单行注释:用#


。多行注释:标志符是三个连续的双引号,也可以使用三个连续的单引号


《从Python开始学编程》第1~3章_第1张图片

▲:如果想要在Python 2中使用中文,则需要在程序开始之前加上一行编码信息 (# -


。*- coding: utf-8 -*- ),以说明程序文件中使用了支持中文的utf-8编码。在Python 3中不需要这一行信息


第2章 先做键盘侠

2.1 计算机会算术

·数值运算

。常见的数值运算:

《从Python开始学编程》第1~3章_第2张图片

。除了常见的数值运算,字符串也能进行加法运算。其效果是把两个字符串连成一个字符串

。一个字符串还能和一个整数进行乘法运算(一个字符串与一个整数n相乘的话,会把该字符串重复n次)

·逻辑运算

。布尔值(Boolean): Ture,False

。在Python中,用and来表示"与"的逻辑运算,在“与”运算中,两个子命题必须都为真时,用“与”连接起来的复合命题才是真

。Python用or来进行“或”的逻辑运算,在“或”运算中,只要有一个命题为真,那么用“或'连接起来的复合命题就是真

。Python使用not这个关键字来表示非运算

·判断表达式

。判断表达式符号:==

。其他的判断运算符:

!=  不等于      

<  小于   

 <=   小于或等于    

 >  大于    >

=  大于或等于

·运算优先级

。运算符可以按照优先级先后归为:


《从Python开始学编程》第1~3章_第3张图片

。如果是相同优先级的运算符,那么Python会按照从左向右的顺序进行运算:

。如果有优先级高的运算符,Python会打破从左向右的默认次序,执行优先级高的运算,比如:括号会打破运算优先级。如果有括号存在,会先进行括号中的运算

2.2计算机记性好

·变量革命

。用变量的方式来存储数据:给变量起一个变量名,在程序中作为该变量空间的索引。数据交给变量,然后在需要的时候通过变量的名字来提取数据。(从硬件的角度来看,给变量赋值的过程,就是把数据存入内存的过程)

。在计算机编程时,经常设置许多变量,让每个变量存储不同功能的数据,比如:

。另外,可根据情况增大或减小变量的值

。变量提供的符号化表达方式,是实现代码复用的第一步。

·变量的类型

。数据类型:整数(Integer),浮点数(Float),布尔值(Boolean),字符串(String,简写为bool)等


《从Python开始学编程》第1~3章_第4张图片


。Python中,可以把各种类型的数据赋予同一个变量


。变量类型

一动态类型;能自由改变变量类型的特征

一静态类型:变量有事先说明好的类型,特定类型的数据必须存入特定类型的变量

。type()函数:查看变量类型

。常见变量类型:


《从Python开始学编程》第1~3章_第5张图片

。计算机的存储空间以位(bit)为单位,每一位能存储一个0或1的数字。为了记录一个布尔值,只需让1代表真值,0代表假值就可以。

。计算机在内存中必须要分类型存储

.序列

。序列:序列包含的一个数据被称为序列的一个元素。序列可以包含一个或多个元素 也可以是完全没有任何元素的空序列

。两种序列:元组(Tuple)和列表(List)。二者的主要区别在于,一旦建立,元组的各个元素不可再变更。

。同一个序列可包含不同类型的元素 也是Python动态类型的一个体现。此外,序列的元素不仅可是基本类型的数据,还可以是另外一个序列

。由于元组不能改变数据,所以很少会建立一个空的元组。而序列可以增加和修改元素 所以Python经常会建立一个空表

。序列元素的位置索引称为下标。第一个元素的下标为0

。表的数据可变更,可以对单个元素进行赋值,通过下标说明想对哪个元素赋予怎样的值,但不能对元组的元素进行赋值

。通过范围引用的方式,来找到多个元素。范围引用的基本样式是:序列名[下限:上限:步长]下限表示起始下标 上限表示结尾下标。在起始和结尾下标之间,按照步长间隔找到元素 默认步长为1

。表的范围引用与元组同。在范围英语中,如果写明上限,那么上限下标指向的元素讲不包括在结果中

尾部引用


《从Python开始学编程》第1~3章_第6张图片

.词典

词典的很多方面和表类似,是一个可以容纳多个元素的容器,但是词典不是以位置来作为索引的 词典允许用自定义的方式来建立数据的索引

可在词典中修改或增添一个元素的值,也可构建一个新的空的词典

2.3计算机懂选择

.if结构

if 结构:条件语句

。if...else...语句:if 与else 分别有隶属于它们的一行代码,从属代码开头会有四个空格的缩进,程序会根据if后的条件是否成立,选择执行if的从属代码,还是执行else的从属代码

。也可写只有if的程序 如果if后的条件不成立,那么计算机什么都不用执行

.小弟靠后站

缩进:Python中通过缩进来识别出隶属关系,Python中的缩进

.if的嵌套与elif

Python先检测if的条件,如果if的条件为假,则跳过隶属于if的程序块,检测elif的条件

.2.4计算机循环

·for 循环:

序列中元素的个数决定了循环重复的次数,for循环的重复次数是确定的,for循环会依次从序列中取出元素,赋予跟紧在for后面的变量

。如果只是想简单地重复特定的次数,不想建立序列,则可:


程序中的5向range()函数说明了需要重复的次数,而for循环后面依然有一个变量i,它为每次循环起到了计数的功能

.while循环

。while后面紧跟一个条件,如果条件为真,则while会不停地循环执行隶属于它的语句。只有条件为假时,程序才会停止

。一旦有了无限循环,程序就会不停地运行下去,直到程序被打断或电脑关机

.跳过或停止

。continue:跳过循环的这一次执行,进行下一次的循环操作

。break:停止执行整个循环

.附录:代码规范


《从Python开始学编程》第1~3章_第7张图片

第三章 过程大于结果

3.1 懒人炒菜机

.定义函数

。def:通知Python要定义函数了在函数名后面还有一个括号,用来说明函数有哪些参数,参数可以有多个,也可以完全没有,但即使没有输入数据,函数后面的括号也要保留

。形参:即函数定义中的参数,是一个形式代表,并非真实数据

。return:用于说明函数的返回值,可返回多个值;此外,return还起到中止函数和制定返回值的功能吗

.调用函数

。函数调用:把真实的数据填入到括号中,作为参数传递给函数,除具体的数据表达式外,参数还可以是程序中已经存在的变量

。 实参:是括号里具体的参数,在函数调用时出现

。调用函数获得返回值后,常把返回值赋给变量

.函数文档

。help()函数:用来找到某个函数的说明文档

以下以函数max()为例

。对于自定义的函数,需要自己加上注释,在参数和返回值上要尽量写得详细

3.2参数传递

.基本传参

。参数传递:即把数据用参数的形式输入到函数

如果只有一个参数,只需把函数调用时输入的唯一数据对应为参数既可;

。位置传参:如果有多个参数,那么在调用函数时,Python会根据位置来确认数据对应哪个参数

。关键字传参:根据参数名让数据与符号对应上

。此外,位置传递与关键字传递可以混合使用

.包裹传参

。包裹位置传参:所有的数据都根据先后顺序,收集到一个元组。在函数内部,通过元组来读取传入的数据

。在定义package_position()时要在元组名all arguments前加*号

.包裹关键字传参:把传入的数据收集为一个词典,当函数调用时,所有参数会收集到数据容器里,把数据传递给函数使用

。为了提醒,参数all-arguments是包裹关键字传递所用的字典,因此在all_arguments前加**

。包裹位置传参和包裹关键字传参还可以混合使用

。包裹传参和基本传参混合使用,其出现顺序:位置一关键字一包裹位置一包裹关键字

·解包裹

。解包裹:把一个数据容器传递给函数,再自动地分解为各个参数

。包裹传参和解包裹不是相反操作,而是两个相对独立的功能

。元组解包裹:在args前加上*符号,来提醒Python ,把元组拆成单个元素,每一个元素对应函数的一个位置参数

。词典解包裹:在args前加上**符号,在传递词典args时,让词典的每个键值作为一个关键字传递给函数unpackage()

。解包裹用于函数调用,在调用函数时,几种参数的传递也可以混合,顺序为:位置一关键字一位置解包裹一关键字解包裹

3.3递归

.高斯求和和数学归纳法

.函数栈

。栈:数据结构的一种,可以有序地存储数据

。特征:后进先出;只支持两个操作:pop和push,栈用弹出(pop)操作来取出栈顶元素,用推入(push)操作将一个新的元素存入栈顶

。程序运行的过程:可看作一个先增长栈后消灭栈的过程

。变量的作用域:函数内部可以创建新变量,Python寻找变量的范围不止是当前帧,它还会寻找函数外部(即主程序)中定义了的变量

一当主程序中已经有了一个变量,函数调用内部可以通过赋值的方式创建了一个同名变量。函数会优先使用自己函数帧中的变量

一且函数内部使用的是自己内部的变量,所以函数内部对变量的操作不会影响到外部变量(特例:对于数据容器,函数内部的更改会影响到外部)

3.4引入那把宝剑

.引入模块

.搜索路径

。在引入模块时,把库文件和应用文件放在了同一文件夹下,当在该文件夹下运行程序时,Python会自动在当前文件夹搜索它想要引入的模块

。标准库是Python官方提供的库,Python会自动搜索标准库所在的路径

3.5异常处理

.恼人的bug

。语法错误,比如,下面程序错用了语法,在for的一行没有加引号


。运行时错误

这种错误只有在运行时,编译器才会发现。比如:下面的程序并没有语法上的错误,但在Python运行时,会发现引用的下标超出了列表元素的范围;


程序会中途报错:


。语义错误

一这种错误,编译器认为程序没有问题,可以正常运行。但当检查程序时,却发现程序并非想做的

.Debug

。debug:即修复程序缺陷

.异常处理

。异常处理语句:try-except语句

。异常处理完整的语法形式:


《从Python开始学编程》第1~3章_第8张图片

代码地址:https://gitee.com/mabingqi/learn_programming_from_python

你可能感兴趣的:(《从Python开始学编程》第1~3章)