第一章 用编程改造世界
第二章 先做键盘侠
第三章 过程大于结果
第一章 用编程改造世界
1.1 从计算机到编程
·冯.诺伊曼结构
。控制器:管理计算机其他部分的工作,决定执行指令的顺序,控制不同部件之间的数据交流
。运算器:进行运算的部件,进行+,—,*,/,与,或,非的运算,与控制器一起构成了CPU
。存储器:存储信息的部件(冯.诺依曼提出存储器不但要记录数据,还要记录所要执行的程序)
。输入设备:向计算机输入信息的设备,如键盘,鼠标,摄像头等
。输出设备:计算机向外输出信息的设备,如显示屏,打印机,音响等
1.2 所谓的编程,是做什么的
·封装:把执行特殊功能的指令打包成一个程序块,然后给这个程序块起个容易查询的名字。如果需要重复使用,则可通过名字调用
·封装代码的方式有很多种,根据不同的方式,写程序时要遵循特定的编程方式(eg:面向过程的C语言,面向对象的Java语言,面向函数的Lisp语言)(Python是一门多范式语言)
1.3 为什么学Python
从Python开始学习编程的好处:语法简单,模块丰富等
1.4 最简单的Hello Word
·print()函数:在屏幕上打印出字符,函数括号里的内容即要打印出来的字符,括号里的" "并没有打印在屏幕上,其作用是从print之类的程序文本中标记出普通字符,以免计算机混淆。也可以用' '替换" "
·注释
。注释:用一些文字来解释某一段程序,在Python的程序文件中,每一行中从#开始的文字都是注释,注释的内容并不会被当作程序执行
。单行注释:用#
。多行注释:标志符是三个连续的双引号,也可以使用三个连续的单引号
▲:如果想要在Python 2中使用中文,则需要在程序开始之前加上一行编码信息 (# -
。*- coding: utf-8 -*- ),以说明程序文件中使用了支持中文的utf-8编码。在Python 3中不需要这一行信息
第2章 先做键盘侠
2.1 计算机会算术
·数值运算
。常见的数值运算:
。除了常见的数值运算,字符串也能进行加法运算。其效果是把两个字符串连成一个字符串
。一个字符串还能和一个整数进行乘法运算(一个字符串与一个整数n相乘的话,会把该字符串重复n次)
·逻辑运算
。布尔值(Boolean): Ture,False
。在Python中,用and来表示"与"的逻辑运算,在“与”运算中,两个子命题必须都为真时,用“与”连接起来的复合命题才是真
。Python用or来进行“或”的逻辑运算,在“或”运算中,只要有一个命题为真,那么用“或'连接起来的复合命题就是真
。Python使用not这个关键字来表示非运算
·判断表达式
。判断表达式符号:==
。其他的判断运算符:
!= 不等于
< 小于
<= 小于或等于
> 大于 >
= 大于或等于
·运算优先级
。运算符可以按照优先级先后归为:
。如果是相同优先级的运算符,那么Python会按照从左向右的顺序进行运算:
。如果有优先级高的运算符,Python会打破从左向右的默认次序,执行优先级高的运算,比如:括号会打破运算优先级。如果有括号存在,会先进行括号中的运算
2.2计算机记性好
·变量革命
。用变量的方式来存储数据:给变量起一个变量名,在程序中作为该变量空间的索引。数据交给变量,然后在需要的时候通过变量的名字来提取数据。(从硬件的角度来看,给变量赋值的过程,就是把数据存入内存的过程)
。在计算机编程时,经常设置许多变量,让每个变量存储不同功能的数据,比如:
。另外,可根据情况增大或减小变量的值
。变量提供的符号化表达方式,是实现代码复用的第一步。
·变量的类型
。数据类型:整数(Integer),浮点数(Float),布尔值(Boolean),字符串(String,简写为bool)等
。Python中,可以把各种类型的数据赋予同一个变量
。变量类型
一动态类型;能自由改变变量类型的特征
一静态类型:变量有事先说明好的类型,特定类型的数据必须存入特定类型的变量
。type()函数:查看变量类型
。常见变量类型:
。计算机的存储空间以位(bit)为单位,每一位能存储一个0或1的数字。为了记录一个布尔值,只需让1代表真值,0代表假值就可以。
。计算机在内存中必须要分类型存储
.序列
。序列:序列包含的一个数据被称为序列的一个元素。序列可以包含一个或多个元素 也可以是完全没有任何元素的空序列
。两种序列:元组(Tuple)和列表(List)。二者的主要区别在于,一旦建立,元组的各个元素不可再变更。
。同一个序列可包含不同类型的元素 也是Python动态类型的一个体现。此外,序列的元素不仅可是基本类型的数据,还可以是另外一个序列
。由于元组不能改变数据,所以很少会建立一个空的元组。而序列可以增加和修改元素 所以Python经常会建立一个空表
。序列元素的位置索引称为下标。第一个元素的下标为0
。表的数据可变更,可以对单个元素进行赋值,通过下标说明想对哪个元素赋予怎样的值,但不能对元组的元素进行赋值
。通过范围引用的方式,来找到多个元素。范围引用的基本样式是:序列名[下限:上限:步长]下限表示起始下标 上限表示结尾下标。在起始和结尾下标之间,按照步长间隔找到元素 默认步长为1
。表的范围引用与元组同。在范围英语中,如果写明上限,那么上限下标指向的元素讲不包括在结果中
尾部引用
.词典
词典的很多方面和表类似,是一个可以容纳多个元素的容器,但是词典不是以位置来作为索引的 词典允许用自定义的方式来建立数据的索引
可在词典中修改或增添一个元素的值,也可构建一个新的空的词典
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:停止执行整个循环
.附录:代码规范
第三章 过程大于结果
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语句
。异常处理完整的语法形式:
代码地址:https://gitee.com/mabingqi/learn_programming_from_python