Week 1
本周学习主要内容包括基本环境安装(多版本共存,path路径),计算机基础知识,Python基础知识,基础语法,内建函数,数据结构(部分)
基本环境安装
1.使用Python 3.7.4 / 3.6.8 (64-bit)
2. 手动安装时增加环境变量以及勾选path路径
3. 引擎搜索“cmd”打开命令行
4. pip install ipython
5. Pycharm
6. Jupyter notebook(目前常用)
计算机基础知识
- 冯诺依曼体系(计算机五大部件)
- 五大核心部件:中央处理器(CPU)[独占两大部分]+存储器(Memory)+ 输入输出设备(Input/Output)
- 运行速度:“CPU最快内存次之,IO设备慢得要死”
优化:根据CPU内存IO设备的运行特点做优化 - CPU只认二进制
- 高级语言需要解释器或编辑器变为计算机认识的低级语言
- 程序 = 算法 + 数据结构
Python基础知识
数字:
- 整数int
- 浮点数float
- 复数complex
字符串:
- 一般使用’或"
- ‘’’ 和"""可以在其中自由使用单双引号且可换行
- r前缀用于去掉转义字符\的转义作用
- f前缀用于创建字符串,插值
续行:
在行尾使用\,\之后不能有任何字符,直接输入换行内容
语言类型:
强类型语言:不同类型之间操作必须先强制转换为同类型
弱类型语言:不同类型之前可以操作,自动隐式转换
进制:
- Python中表示十六进制用0x;表示八进制用0o;表示二进制用0b
二进制表示十进制中的10:0b1010
(可以用8421口诀) - 1字节(byte)为8位(bit)
- 二进制转十六进制四位一断
1111 = F = 15
11111 = 1F = 31
111111 = 3F = 63
1111111 = 7F = 127
11111111 = FF = 255 - 二进制中最低位是1,一定是奇数;最低位是0,一定是偶数
码制
-
原码:1字节为例,给人看的,计算机不是这样储存
short 0b10000000 00000001
0b0000 0001 #正1
0b1000 0001 #负整数1,原码中最高位置1表示负数 -
反码:正整数反码与原码一样,负数不同,符号位不变,将原码的其余各位按位取反
0b0000 0001 #正1
0b1000 0001 #原码负1
0b1111 1110 #反码-1 -
补码:正整数补码与原码一样,负数不同,符号位不变,将原码的其余各位按位取反并在最低位+1,补码的补码是原码。。计算机内部在内存中,负整数就是使用补码存放的。
0b0000 0001 #正1
0b1000 0001 #原码负1
0b1111 1110 #反码-1
0b1111 1111 #补码-1, 【16进制中0xFF,即255, 但如果代表的是有符号数,代表-1】
0xFE 是1字节的有符号数,请问他是十进制多少? – (-2)
1000 0010 原码
1111 1101 反码
1111 1110 补码
运算符
- 算术运算: +、-、*、/、**、%、//
- 位运算:&、|、~、>>、<<、^
- 比较运算:返回布尔值(bool) ==、!=、>、<、>=、<=
不同类型之间可以比较是否相同,但不能比较大小 - 逻辑运算符:and 与, or 或, not 非
把所有操作的数值当作真或假来进行逻辑运算,完了之后返回的还是原来的值,逻辑运算and可以看成,所以1乘任何数为本来值,而0乘任何都为0,逻辑运算返回不一定是bool值!! - 赋值语句:先做等式右边然后赋值给等式左边
Python中赋值即重新定义
基础语法
程序控制:
- 顺序
- 分支:单分支,多分支
- 循环:while循环,for语句
多分支:
- 只进一个循环,有语句块(注意缩进)
- 前一个条件被测试过,下一个条件相当于隐含着这个条件
- 只要有一个分支被执行,其他分支都不会被执行
a = -100
if a > 0: #进不去,测试过a不大于0
print('positive')
elif a == 0: #隐含的条件 a<=0
pritn('zero')
else: #隐含条件 a<0
print('negative')
嵌套:(但不宜过深)
a = -100
if a > 0:
print('positive')
else:# a<=0
if a == 0:
print('zero')
else: # a<0
print('negative')
while循环:
- 死循环
- 不太确定次数的循环
for语句:
- 遍历,容易中所有元素不重复的取一遍(有的顺序会变,有的容器会为空,有的不会改动,取决于容器性质)
- range()函数
range(stop) -> range object #始终点,默认起点就是0,
#返回的[0,stop),前包后不包[0,stop-1]
range(start, stop[, step]) -> range object
range(0,1) #[0,1) == range(1) 0 1个数据
range(0,10) #[0,10) == range(10) 0-9, 10个数据 计数器
continue
- 当前循环:从continue、break语句往外找,第一个找到的for、while即为当前循环
- continue即为跳过当前循环的当此循环,继续进行下一次循环
break
- 结束当前循环
- break和countinue都是只影响循环,并不是跳出if,而是终止if外的break所在的循环
- 如果循环嵌套,continue和break也只影响语句所在的那一层循环
- 分支和循环结构可以嵌套使用,可以嵌套多层
else
- 一般情况下,循环正常执行,只要当前循环不是被break打断的,就可以执行else子句,哪怕是range(0)也可以执行else子句。
字符串拼接:
str(1) + 'a'
a = 123
b = 'xyz'
f'{a} - {b} === {a}' #>=3.6
"{} *** {}".format(a,b)
数据结构
内建数据结构:
- 序列sequence:字符串str;字节序列bytes,bytearray;列表list,元组tuple
- 键值对:集合set;字典dict
线性数据结构:
- 线性表:(简称表),是一种抽象的数学概念,是一组元素的序列的抽象,它由有穷个元素组成(0个或任意个)
- 顺序表:使用一大块连续的内存顺序存储表中的元素,这样实现的表叫顺序表,或连续表;在顺序表中,元素的关系使用顺序表的存储顺序自然地表示。
- 链接表:在存储空间中将分散存储的元素连接起来,这样实现称为链接表,简称链表。
- 链表是线性结构,内存分布上看着不连续,但是内部有指向,前一个元素指向下一个元素,所以它是有明确的顺序。