花了2万多买的Python教程全套,现在分享给大家,入门到精通(Python全栈

# 第一章
## 输入输出print
> print函数的作用是向目的地输出内容
> 内容可以是: 字符串,数字,表达式
> 目的地可以是:控制台,文件
print可以在控制台输出字符串
```py
print("Hello World!")
```
输出数字
```py
print(114514)
```
输出含有运算符的表达式
```py
print(114000 + 514)
```
向文件输出,就是编写文件内容
```py
fp = open("D:/Project/Python/study/day01/text.txt", "a+")# 第一个变量是文件路径,第二个变量表示续写文件
print("hello world", file = fp)
fp.close() #关闭文件
```
不换行输出
```py
print("114","514")
print(114,"514")
print(114,514)
```
## 转义字符
> 大多数编程语言会有一些特殊字符:回车,换行,制表符..,这些字符可以通过转义字符反斜杠在字符串中表示出来:\

换行符,可以让字符串多行输出
```py
print("第一行\n第二行")
```
回车,回车和换行符不一样会,回车会让回车符之前的字符串不输出
```py
print("hello\rworld")
```
制表符
```py
print("hello\tworld")
print("helloooo\tworld")
```
> 一个制表符代表四个空格,但是制表符前面的字符数不是4的整数倍,制表符会补全空格,使字符总数变成4的整数倍

退格,退格会把退格字符前一个字符去掉
```py
print("hello\bworld")
```
双引号、单引号、反斜杠
```py
print("这是一个单引号\'")
print("这是一个双引号\"")
print("这是一个反斜杠\\")
```
在字符串之前写一个r可以让程序忽视转义字符,但是字符串最后的字符不能是单数个反斜杠
```py
print(r"这是两个反斜杠\\") # 这是两个反斜杠\\
print(r"a\"a") # a\"a
print(r""") # 这个会报错
```
## 字符编码
>chr()函数是Python中的一个内置函数,它接受一个整数参数,并返回对应的Unicode字符。
ord()函数是另一个Python中的内置函数,它接受一个Unicode字符作为参数,并返回对应的整数值。
chr()函数和ord()函数是互逆的,即ord(chr(x)) == x和chr(ord(c)) == c。它们可以在需要将整数和字符之间进行转换的情况下使用。请注意,chr()函数和ord()函数只适用于Unicode字符,而不适用于ASCII字符或其他字符集。
```python
print(chr(23002)) # 姚
print(ord("姚")) #23002
```
## 标识符和保留字
>我们给变量、函数、类、模块和其它对象起名名字叫标识符
在python中一些单词本赋予了特殊的含义,标识符不能使用这些特殊单词,这些单词就叫做保留字(关键字)
>定义标识符的规则:
>可以使用字母(大小写)、数字、下划线
>不能以数字开头
>不能是保留字
>严格区分大小写
使用keyword库中的keyword变量即可查看有哪些保留字
```py
import keyword
print(keyword.kwlist)
```
## 变量
>变量由三部分组成,id,类型,值。id是该变量在内存中的唯一地址
定义变量: 变量名 = 值,python中定义变量不需要写变量的类型
```py
name = "张三"
```
可以通过函数来获取变量的id和类型
```python
print(id(name)) # 2644770188400
print(type(name)) # <class 'str'>
```
变量可以多次赋值
```py
name = '张三'
print(name) # 张三
name = '李四'
print(name) # 李四
```
## 数据类型
> 整型 int 114514
> 浮点型 float 114.514
> 布尔型 bool True(代表真) ,False(代表假)
> 字符串类型 str "张三" '张三'
### 整形
> 整形 integer 简写为int 可以表示正整数、负整数和零
> 整数有不同的表达方式:
> 十进制->默认的进制
> 二进制->以0b开头
> 八进制->以0o开头
> 十六进制->以0x开头
```py
a = 123 #123
b = 0b101010 #42
c = 0o177 #127
d = 0x1ae #430
print(a,b,c,d)
```
### 浮点型
> 浮点数由整数部分和小数部分组成
> 但浮点数存在不精确性
```py
a = 1.1
b = 2.2
print(a + b) #3.3000000000000003
```
> 解决不精确的方法:导入decimal模块
```py
from decimal import Decimal
print(Decimal('1.1') + Decimal('2.2')) # 3.3
# 主要这里的1.1和2.2是字符串类型
```
### 布尔类型
> 布尔类型只有两个值,一个是真:True,一个是假:False,可以在判断语句中使用
> 布尔类型数据可以转换成数字,Ture可转换为1,False可转换成0
```py
bool1 = True;
bool2 = False;
print(bool1,type(bool1)) #True <class 'bool'>
print(bool2,type(bool2)) #False <class 'bool'>
```
### 字符串类型
> 字符串类型是非常常见的数据类型,它可以用单引号,双引号,三引号来表示
> 三引号就是三个单引号或者三个双引号,用三引号可表示多行字符串
```py
str1 = '张三' # 单引号
str2 = "李四" # 双引号
str3 = r'''王五
赵六''' # 三个单引号的三引号
str4 = """王五
赵六""" # 三个双引号的三引号
print(str1,type(str1)) #张三 <class 'str'>
print(str2,type(str2)) #李四 <class 'str'>
print(str3,type(str3))
#王五
# 赵六 <class 'str'>
print(str4,type(str4))
#王五
# 赵六 <class 'str'>
```
### 数据类型转换
不同数据类型的数据可以相互转换
int数据可以由字符串或者float数据转换(使用int()函数)
float数据可以由int或者字符串数据转换(使用float()函数)
字符串数据也可以由int或者float类型数据转换(使用str()函数)
布尔类型数据也可以转换成int类型数据,True代表1,False代表0

int()
```py
a = "1"
b = '-1'
c = 1.1
d = True
print(int(a),type(int(a)))# 1 <class 'int'>
print(int(b),type(int(b)))# -1 <class 'int'>
print(int(c),type(int(c)))# 1 <class 'int'>
print(int(d),type(int(d)))# 1 <class 'int'>
```
float()
```py
a = 1
b = '-1'
c = "1.12"
print(float(a),type(float(a)))# 1.0 <class 'float'>
print(float(b),type(float(b)))# -1.0 <class 'float'>
print(float(c),type(float(c)))# 1.12 <class 'float'>
```
str()
```py
a = 122
b = 1.11
c = True
print(str(a),type(str(a)))# 122 <class 'str'>
print(str(b),type(str(b)))# 1.11 <class 'str'>
print(str(c),type(str(c)))# True <class 'str'>
```
## 注释
> 注释即为嵌入在程序中的,对程序没有影响的,对代码有标注性意义的文本。(这是我给注释下的定义)
> 注释可分为单行注释和多行注释
> 单行注释用井号来表示"#"
> python中没有多行注释,但是你可以写一个多行字符串,不给他添加变量来代替多行注释
```py
# 单行注释
"""
多行注释
"""
```
还有一个特殊类型注释,中文编码声明注释,声明该文件的编码格式
```
# coding: gbk
```
# 第二章
## input()函数
> 参数:在控制台的提示文字
> 作用:input函数数用于获取标准输入(通常是键盘)获取用户的输入,它的返回值就是用户的输入
> 返回值:input函数的返回值都是str类型,如果需要其他类型的数据,就使用类型转换函数进行转换
```py
str = input("请输入一个字符串:"); # bianys
print(str,type(str)) #bianys <class 'str'>
str = input("请输入一个数字:"); # 2
print(str,type(str)) #2 <class 'str'>
```
可以看到,就算输入的是数字,返回的也是字符串类型的数据。
## 运算符
### 算术运算符
```py
print(1+1) #加法运算符:+
print(1-1) #减法运算符:-
print(1*1) #乘法运算符:*
print(3/2) #除法运算符:/ 1.5
print(3//2) #整除运算符://,返回值向下取整 1
print(9//-4) # -3
print(-9//4) # -3
print(5 % 3) #取余运算符:%,余数 = 被除数 - 除数*商
print(-5 % 3) # 1
print(5 % -3) # -1
print(2**3) #幂运算符:**,该表达式表示2的三次方
```
### 赋值运算符
>赋值运算符就是给变量赋值的,用直接赋值,链式赋值,参数赋值,解包赋值
>
直接赋值
```py
a = 3
print(a)
```
链式赋值
```py
a=b=c= 20
print(a,b,c) # 20 20 20
```
参数赋值
```py
a=10
a+=5
print(a)# 15
a-=5
print(a)# 10
a*=5
print(a)# 50
a/=5
print(a)# 10.0
a//=5
print(a)# 2.0
a%=5
print(a)# 2.0
```
解包赋值,按照顺序赋值
```py
a,b,c = 10,20,30
print(a,b,c) # 10 20 30
a,b = b,a
print(a,b)# 20 10
```
### 比较运算符
>比较运算符是一类给变量的大小、真假进行判断的运算符,返回布尔类型数据
```py
a,b = 10,20
print(a>b)#False
print(a>=b)#False
print(a>=b)#False
print(a>=b)#False
print(a<=b)#True
print(a<b)#True
print(a==b)#False
print(a!=b)#True
```
== 和 is
> 判断变量是否同有两种方式,一种是==,另一种是is
> == 是对变量的值进行比较
> is 和 is not 是针对变量的地址,也就是id进行比较
```py
a = 10
b = 10
print(a==b,id(a),id(b)) #True 140732815369288 140732815369288
print(a is b,id(a),id(b)) #True 140732815369288 140732815369288
a = [1,2,3]
b = [1,2,3]
print(a==b,id(a),id(b)) # True 2014458369216 2014460169280
print(a is b,id(a),id(b)) # False 2014458369216 2014460169280
print(a is not b,id(a),id(b)) # True 2014458369216 2014460169280
```
in 与 not in
>in判断一个变量是否在另一个变量集合中,这个变量集合其实就是数组(字符串可当作字符数组)
>in 与 not in 正好相反,判断一个变量是否不在另一个变量集合中
```py
list = [1,2,3,4]#这是一个数组
print(1 in (1,2,3))#True
print(5 in list)#False
print(1 not in [1,2,3])#False
print(8 not in [1,2,3])#True
```
### 布尔运算符(逻辑运算符)
>对布尔类型数据进行计算的运算符是布尔运算符,返回值也是布尔类型的值
>都有and、or、not 分别对应着与、或、非,运算逻辑不多展示。
```py
print(True and False) # False
print(True and True) # True
print(True or False) # True
print(False or False) # False
print(not True) # False
print(not False) # True
```
### 位运算符
python中的位运算符有 &(与)、|(或) 、<<(左移运算)、>>(右移运算)
```py
print(4 & 3) # 按位相与:0
print(4 | 3) # 按位相或:7
print(129 << 1) # 4左移1位,逻辑左移:258
print(4 >> 1) # 8又移2位,逻辑右移:2
print(255 >> 2) # 逻辑右移:63
```
### 运算符的优先级
> 算数符的优先级
小括号>算术运算>位运算>比较运算符>布尔运算符>赋值运算符(=)
** > (*,/,//,%) > (+,-) > (<<,>>,&,|) > (>,<,==,>=,<=.is,is not,in) > (and,or,not) > (=)
```py
a = 2**2 * 3 + 1 > 1 << 4 and True
b = 2**2 * 3 + 1
c = 1 << 4
print(a)# False
print(b)# 13
print(c)# 16
```
# 第三章
## 程序的组织结构(程序的流程控制)

程序的运行结构分为三种,顺序结构,选择结构,循环结构
### 顺序结构
>顺序结构就是程序由上到下,由左到右依次执行。
```py
print("开始把大象放入冰箱")
print("1-打开冰箱")
print("2-把大象放进冰箱")
print("3-关闭冰箱")
print("结束")
"""输出结果
开始把大象放入冰箱
1-打开冰箱
2-把大象放进冰箱
3-关闭冰箱
结束
"""
```
### 对象的布尔值
>在python中,任何东西都是对象,所有的对象都有一个对应的布尔值,可以通过内置函数bool()来获取对象的布尔值
>除了以下几个对象的布尔值是False,其他对象的布尔值都是True
False,0,0.0,"",'',None,空列表[],list(),空元组(),tuple(),空字典{},disc(),空集合set()
```py
# 以下输出返回值全是False
print(bool(False)) # False
print(bool(0)) # 零
print(bool(0.0))# 零点零
print(bool(""))# 空字符串
print(bool(None))# 空对象
print(bool([]))# 空列表
print(bool(list()))# 空列表
print(bool(()))# 空元组
print(bool(tuple()))# 空元组
print(bool({}))# 空字典
print(bool(dict()))# 空字典
print(bool(set()))# 空集合
```
### 单分支结构
介绍
>单分支结构就是,如果满足某个条件,就做某件事
语法
>if 布尔表达式:
缩进(一般是4格)要做的事
缩进(一般是4格)要做的事
缩进(一般是4格)要做的事
...
例如
```py
money = 2000000
if money > 114514: #注意这里有个冒号
print("土豪啊")
```
### 双分支结构
介绍
>双分支结构就是,如果满足某个条件,就做某件事,否则就做另一件事
语法
>if 布尔表达式:
缩进(一般是4格)要做的事
缩进(一般是4格)要做的事
缩进(一般是4格)要做的事
else:
缩进(一般是4格)另一件事
缩进(一般是4格)另一件事
缩进(一般是4格)另一件事
...
例如
```py
height = 190;
if height >= 180:
print("长得真高啊")
else:
print("长的真低啊")
```
### 多分支结构
介绍
>如果满足某个条件,就执行某件事,如果不满足,否则,如果满足另一个条件,就执行另一件事,否则....,最后所有条件都不满足,执行某一件事。
语法
>if 布尔表达式1:
代码1
elif 布尔表达式2:
代码2
elif 布尔表达式3:
代码3
... ...
else:
代码n
例如
```py
if 100 <= score >= 90:
print("真厉害,不愧是我的儿子")
elif score >= 80:
print("这回考得不错")
elif score >= 70:
print("正常发挥,还行")
elif score >= 60:
print("这回考的不行,给你一个大比兜")
elif 0 <= score < 60:
print("龟孙贼,来来来,看你能不能看到明天的太阳!")
else:
print("这逼老师,瞎几把判的分吧")
```
### 嵌套分支
>分支结构是可以嵌套的,分支结构里面也可以写分支结构

例如
```py
money = int(input("消费金额:"))
haveCard = input("是否有会员卡(y/n):")
if haveCard == "y":
if money >= 200:
print("打8折,消费:", money * 0.8, "元")
elif money >= 100:
print("打9折,消费:", money * 0.9, "元")
else:
print("不打折,消费:", money, "元")
else:
if money >= 100:
print("打九五折,消费:", money * 0.95, "元")
else:
print("不打折,消费:", money, "元")
```
### 条件表达式
>条件表达式是一个表达式,是表达式它返回的就是一个值
>他会根据条件的不同返回两个不同的值
语法
值1 if 布尔表达式 else 值2 # 如果布尔表达式为True,返回值1,否则返回值2
```py
a = 10
b = 20
print("a>b" if a > b else "a<=b")
```
### pass语句
pass代表空语句,当我们在一个地方必须要代码,否则会报错的时候,我们可以暂时用pass来代替
```py
if True:
#这个地方必须写代码,否则会报错
else:
#这个地方必须写代码,否则会报错
```
```py
# 这样就不会报错了
if True:
pass
else:
pass
```
### 内置函数range()
>range返回一个range类型的对象,range对象可以通过list函数转换成一个数组
>根据参数的不同返回的集合也不同
>range(int a) # a代表返回从0到a-1的一个数组,每个数之间的间隔为1
>range(int a,int b) # a代表返回从a到b-1的一个数组,每个数之间的间隔为1
>range(int a, int b, int c) # a代表返回从a到b-1的一个数组,每个数之间的间隔为c
```py
r = range(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(r))
r = range(2, 10) # [2, 3, 4, 5, 6, 7, 8, 9]
print(list(r))
r = range(2, 7, 2) # [0, 2, 4, 6, 8]
print(3 in r) # False
print(4 in r) # True
print(5 not in r) # True
```
注意:range()函数返回的只是一个range类型的对象,并不是一个数组,因此在内存中占空间是比较小的,当使用list()函数将其转换成一个数组后,他才是一个真正的数组。
### 循环