#三月十六日
计算机基础知识
冯.诺依曼:
一:提出二进制
二:提出冯.诺伊曼体系:
计算机分为五大部件控制器、运算器、存储器、输入设备、输出设备。
控制器:用于完成各种算数运算、逻辑运算和数据传送等数据加工和处理。
运算器:用于控制程序的执行,是计算机的大脑。运算器和控制器组成计算机的中央处理器(cpu)。控制器根据存储在存储器中的指令序列(程序)进行工作,并由一个程序计数器控制指令的执行。控制器具有判断能力,能根据计算结果选择不同工作流程。
存储器:用于记忆程序和数据,例如:内存。程序和数据以二进制代码形式不加区别的放在存储器中,存放位置由地址确定。内存是掉电易失设备。
输入设备:用于将数据或程序输入计算机设备中,例如:鼠标和键盘。
输出设备:将程序或数据的处理结果展示给用户。例如:显示器、打印机。
CPU中还有寄存器和多级缓存cache。
cpu运行频率最快,内存次之,io极慢。
解释器
Python源代码写好后需要经过解释器编译成中间字节码,最后在解释器上执行。
一般用ipython
python基础语法
注释:#标注的文本。
数字
一、进制
二进制0b:由零和一组成,逢二进一。
八进制0o:可由三位二进制组成。
十进制10
十六进制0x:可由四位二进制数组成。由a.b.c.d.e.f表示10到15.
二、浮点数flot:小数
三、复数complex:1+2j或1+2J
字符串
一、使用单双引号引用的字符序列。
二、单双三引号可以跨行、可以在其中自由的使用单双引号。
三、r前缀:在字符串前面加上r或者R前缀,表示该字符串不做特殊处理。
四、f前缀:格式化字符串。
转义序列
一、转义:在需要转移的字符串前加斜杠。
二、前缀r:把里面的所有字符当普通字符对待,转义字符也不在转义。
缩进
未使用C语言的花括号,而是采用缩进的方式表示层次关系。通常使用四个空格缩进。
续行
一、在行尾使用\,注意\之后除了紧跟着换行之外不能有其他字符。
二、如果使用各种括号,认为括号内是一个整体,其内部跨行不容\。
标识符
一、一个名字用来指定一个值。
二、只能是字母、下划线和数字。
三、只能以字母或下划线开头。
四、不能是python的关键字,例如def、class就不能作为标识符。
五、python是大小写敏感的。
标识符的约定
一、不允许使用中文,也不建议拼音。
二、不要使用歧义单词,例如class。
三、在python中不要随意使用下划线开头的标识符。
语言类型
python是动态强类型语言。
动态语言
一、不用事先声明语言类型,随时可以赋值为其他类型。
二、编程时不知道是什么类型很难推断。
强类型语言
一、不同类型语言之间的操作必须先强制类型转换为同一类型。
进制转换
一、二进制与十进制的相互转换
-
二进制转十进制
小数点前或整数从右到左用二进制的每个数乘以二的相应次方
小数点后或整数从左到右用二进制的每个数乘以二的相应次方 -
十进制转二进制(整数)
除以二取余逆序排列 -
十进制转二进制(小数)
乘二取余顺序排列
二、二进制与八进制互相转换
-
二进制转八进制
-
取三合一法
从二进制的小数点为分界点,向左(右)每三位取成一位,然后按权相加,小数点位置不变,所得数字按顺序排列。无法凑足添零。 -
八进制转二进制
取一分三法
将一个八进制的数分成三个二进制数顺序排列
三、二进制与十六进制的相互转化
-
二进制装十六进制
取四合一法(同上) -
十六进制转二进制
取一分四法(同上)
##三月十七日
原码反码与补码
-
原码:所有进制数的二进制表达
-
反码:正数的反码与原码相同,负数的反码符号位不变其余按位取反
-
补码:正数的补码与原码相同,负数的不嘛符号位不变,其余按位取反后加一
-
补码的补码就是原码
False等价
逻辑运算
算术运算符
- +、-、*、/、//(向下取整除)、%(取模)、**(幂)
位运算符
- &位与、|位或、^异或、<<左移、>>右移
- ~按位取反,包括符号位
比较运算符
- 必须是同类型比较
- 返回一个布尔值
- ==、!=、>、>=、<、<=
逻辑运算符
- and与、or或、not非
- and如果前面的表达式等价为False,后面就没有必要计算了,这个逻辑表达式最终一定等价位False
- or如果前面的表达式为True,后面没有必要计算了这个逻辑表达式最终一定等价位False
- 返回值不一定是bool型
- 一般把短路条件放在最前面可以大大减少计算量
赋值运算符
- =
- 赋值即定义
运算符优先级
内建函数
-
int
将其他数值转化为整形
-
str
将其他数值转化为字符串,方便人的阅读 -
type
查看数值类型
- isinstance
是否是后面指定的那个类型的数据
-
input(“请输入数据”)
返回你输入的字符,类型是字符串
-
print
打印所有的类型。默认sep = “ ”,end = “\n” -
flot
将字符串整形转换为浮点数
-
pow
前面数的后面数的次方
math.pow返回浮点数
pow返回整形
一般直接用幂表示
-
max
取最大值,只能同类型比较
-
取整
-
//
向下取整 -
int
只截取整数部分 -
math.ceil
向上取整
-
round
圆整四舍六入五取偶
基础语法
- if
单分支
多分支
-
多分支结构只要有一个分支被执行,其他分支都不会执行
-
前一个条件被测试过,下一个条件相当于隐含着这个条件
-
while
一般用在死循环中,如while True
条件满足时进入循环直到条件不满足为止 -
for
遍历容器中的所有元素不重复地取一边
后一般跟可迭代对象如range函数、列表
###三月二十日
线性数据结构
- 线性表
- 顺序表
- 链表
- 列表list
- 空列表得到方式
l1 = 【】
l2 = list()括号内必须是可迭代参数 - 列表的索引
列表名称+中括号+序号(列表内默认从零开始排序)
列表索引可以正数也可以倒数,倒数从负一开始
索引序号不可超界
索引效率很高,时间复杂度为O1
- 查询
- index
如果找到返回一个值的索引(序号)找不到报错
遍历所有值,查询效率为On,数据庞大尽量不用
- count
返回值在列表中存在的个数
遍历所有值,查询效率为On,数据庞大尽量不用 - len
查询列表长度
修改
增加元素
-
append
内部尾部追加
尾部追加如果内存中地方不够会自动扩容,扩容两倍
扩容耗时牵扯到垃圾回收 效率低不扩容是效率高时间复杂度O1 -
insert
在某个值前面插入值(可以是任意形式)
-
增加多个值
-
extend
后面加可迭代对象,默认尾部添加
-
删除
remove
移除某个值
效率较低 尽量少用
-
pop
pop():尾部移除 -
clear
清除列表所有内容
-
反转
-
reverse
建列表元素反转,倒序排列。基本没用。 -
排序
-
sort
-
默认升序排列
-
加revers = True表示降序
只支持同类型排序,不同类型需要转换成同一类型在进行排序
-
in成员操作
遍历效率不高
列表的组合
-
“+”、“*”
加法
乘法
-
浅层拷贝
-
如果修改地址后面的数字,其它索引引用被修改后的地址
把【1】地址后的数字修改为【100】
这里的【1】是一个地址
所有的【1】都指向一个地址
所以b = 【【100】【100】【100】】 -
复制
copy后生成一个新的地址
-
stack栈
后进先出,队尾操作 -
queue 队列
先进先出FIFO,链表i效率更高
后进先出LIFO,列表和链表都一样
栈和队列中间都不操作只有队首何队尾操作