前言

接上次安装好Python的第三方库并且成功运行之后
准备深入的读懂代码
直接读感觉有点枯燥
并且需要直接查的模块的有点多(其实是连Main方法,输入输出都找不到)
所以感觉还是需要快速过一下B站上一些基础教程
做一个大概的了解
这篇博客也算给自己做一个简单的记录

1.关于Python的基础

1.1 编译器与解释器

编译器/解释器 就是一个将代码翻译成计算机能够识别的命令。

  • 解释器,实时翻译。拿到代码后,解释一句交给操作系统一句。《Python,PHP,JS,Ruby…… 一般称为解释型语言》
  • 编译器,全文翻译。拿到代码后,编译成一个临时文件(计算机能够识别命令),再把文件交给操作系统读取。《C,C++,GO,Java…… 一般称为编译型语言》
  • 两者没有优劣之分
    注:常说Python的解释通常指的是CPython解释器。默认Python解释器是以UTF-8编码打开的。

1.2 输出

  • 默认输出自带换行
print(" ")
  • 如果想不换行,需要这样
print(" ",end="")

1.3 数据类型

1. 整形( int )

2. 字符串( str )

  • 如果字符串中需要有双引号,则将print括号内两边变单引号。""" “”" 三引号用于多行字符串(三个单引号意义一样)
    对于字符串:
  • 加,两个字符串可以通过加好拼接起来。
print("grit"+"666")
  • 乘,可以让整形和字符串进行相乘,以实现让字符串重复出现N次并拼接起来。
print(2*"6")

3. 布尔类型(bool)

  • True / False 在转换成整形后 true == 1 , False == 0。
  • 整形 跟 字符串 无法比较大小,可以比较是否相等。

4.类型转换

  • 遵循一个基本准则:想转换什么类型,就让他包裹一些。
    例:
str(666)="666"
#将整形转换为字符串
int("888")
#将字符串转整形
  • 整形转换成布尔类型时,除了 0 是False,其它都是True。
bool(1)  #true
	bool(-19) #true
	bool(0)   #false
  • 字符串转换成布尔类型时,除了 ""是False,其它都是True。
bool("grit")  #true
	bool("666")   #true
	bool("")      #false
	bool(" ")     #true

1.4 变量

  1. 变量只能由 字母、数字、下划线 组成。
  2. 不能以数字开头
  3. 不能以Python内置的关键字
    建议:
  4. 下划线连接命名
  5. 见名知意

1.5 注释

  1. 单行注释
#单行注释   快捷键为 CTRL + ?
  1. 多行注释
"""
	多行注释
	多行注释
	"""

1.6 输入

#输入
	name = input()
	name = input(" 请输入 :")

特别注意:用户输入的本质上都是当做字符串处理。

1.7 条件语句

  1. if…else
#单条件
if 条件:
    条件成立之后的代码
    ...
else:
   条件不成立之后的代
   ...

提醒: 统一缩进问题(一般都是四个空格)。

#多条件
if 条件A:
	A条件成立之后的代码
	...
else 条件B:
   B条件成立之后的代码
   ...
else 条件C:
   C条件成立之后的代码
   ...
else :
	ABC都不成立
#多条件嵌套
if 条件A:
	if 条件A1:
	...
	else:
	...
  1. while 循环
while 条件:
	...
	...
	...
# break ,用于在While循环中终止循环
while 条件:
	...
	...
	break
	...#代码不执行
# continue , 在循环中用于 结束本次循环,开始下一次循环
while 条件:
	...
	...
	continue
	...#代码不执行,回到while开头
# while...else ,当while后条件不成立时,else中的代码就会执行。
while 条件:
	...
else:
	...

1.8 字符串格式化

字符串格式化,使用更便捷的形式实现字符串的拼接。
1.%

name = "grit"
age =  20
#  %s 字符串占位符  %d整形占位符
text = "我是%s" %name
text = "我是%s,今年%s岁"%(name,age)
text = "%(steam_id)s 登录了。" %{"steam_id":"grit"} #给占位符命名
text = "%(steam_id)s 登录了%(steam_game)。" %{"steam_id":"grit","steam_game":"CS:GO"} #给多个占位符命名

注意:在对于存在百分比的语句,需要占位符,将百分比后边再加一个%即可避免报错。

  1. format(推荐)
text = "我是{0},今年20岁".format("grit")
text = "我是{0},今年{1}岁".format("grit",20)
text = "我是{0},今年{1}岁,真实姓名是{0}".format("grit",20)#复用
#可以简写成如下,效果一样:
text = "我是{},今年20岁".format("grit")
text = "我是{},今年{}岁".format("grit",20)
text = "我是{},今年{}岁,真实姓名是{}".format("grit",20,"grit")#不能复用
text = "我是{n1},今年20岁".format(n1="grit")
text = "我是{n1},今年{age}岁".format(n1="grit",age=20)
text = "我是{n1},今年{age}岁,真实姓名是{n1}".format(n1="grit",age=20)
text = "我是{n1},今年{age}岁"
data1=text.format("grit",20)
data2=text.format("niko",21)
  1. f(Python 3.6版本之后,更便捷)
game = "CS:GO"
text = f"我喜欢玩{game}"
game = "CS:GO"
years = 5
text = f"我喜欢玩{game},{years}年了"
# 进制转换
v1=f"我今年{20}岁"
v1=f"我今年{20:#b}岁"  #转换为2进制
v1=f"我今年{20:#o}岁"  #转换为8进制
v1=f"我今年{20:#x}岁"  #转换为16进制
#f 可以直接执行函数
name = "grit"
text = f"我是{name.upper()}"  #转换成大写

1.9 运算符

int a = 10
	int b = 20
  1. 算数运算符
  2. python如何快速入门 python快速入门精讲_字符串

  3. 比较运算符
  4. python如何快速入门 python快速入门精讲_字符串_02

  5. 赋值运算
  6. python如何快速入门 python快速入门精讲_数据_03

  7. 成员运算
  8. python如何快速入门 python快速入门精讲_Python_04

  9. 逻辑运算
  10. 优先级

加减乘除 > 比较 > not>and>or
实在拿不准就加括号。

1.10 进制和编码

1.10.1 进制

Python中 10 进制是以 整型形式存在的

2 8 16 进制 是以 字符串形式存在的

之间的转换关系如下:

python如何快速入门 python快速入门精讲_字符串_05

v1 = bin(66) #十进制转换为二进制
v2 = oct(66) #十进制转换为八进制
v3 = hex(66) #十进制转换为十六进制
int("XXX",base = X)#将X进制的XXX 转换为十进制

1.10.2 单位

  1. b(bit),位
  2. B(byte),字节
  3. KB(kilo byte),千字节
  4. MB
  5. G
  6. T

1.10.3 编码

编码文字二进制之间的一个对照表。

  1. ASCII编码 (基础)
    规定使用1个字节来表示字母与二进制的对应关系。所以一共2*8个=256。
  2. GB-2312 编码 (不常用)
    由国家信息标准委员会制作。GBK编码,对GB2312进行拓展,包含中日韩等文字。
    在与二进制做对应关系时,由如下逻辑:
    单字节表示,用一个字节表示对应关系。
    双字节表示,用两个字节表示对应关系。
  3. unicode (万国码)
  • Ucs2
    用固定的2个字节去表示一个文字 2*16 = 65535
  • Ucs4
    用固定的4个字节去表示一个文字 2*32
  • 无论是UCS2 UCS4都有缺点:浪费空间
  • unicode的应用:在文件存储和网络传输时,不会直接使用unicode,而在内存中会用unicode。
  1. UTF-8 (应用最为广泛的编码)
    本质上:是对Unicode的压缩,用尽量少的二进制去与文字进行对应。一般中文都是用第三个模板(3个字节)。
  2. Python 相关的编码
字符串(str)  " grit 666"                 unicode处理              一般是在内存
字节(byte)   b"dadsadawedawxz"         utf-8编码 or gbk编码       一般用于文件或网络处理

将字符串转换成字节

v1 = "grit"
v2 = "grit".encode("utf-8")
v3 = "grit".encode("gbk")

2.数据类型详解

字典,列表,字符串 (用的多)

2.1 整形

2.1.1 定义

age = 10
number = 99

2.1.2 独有功能

2.1.3 公共功能

加减乘除

2.1.4 转换

#布尔型
n1 =  int (True)     #True 转换为1 

#字符串类型
v1 = int ("ob1001",base = 2) #把字符串看成二进制的值,然后在转换为 十进制整数,结果 v1=186

# 浮点型(小数)
v1 = int(8.7)     #8

2.1.5 其它

  • python 2 中 有长整形 和 整形
  • python 3 中 只有整形

py3地板除得到准确值
py2底板处得到接近的整数值

v1= 9/2
#py3 v1 = 4.5
#py2 v1 = 4

2.2 布尔类型

2.2.1 定义

data = Falese

2.2.2 独有功能

2.2.3 公共功能

2.2.4 转换

整数0,空字符串,空列表,空元组,空字典转换为布尔值时均为False
其它均为True

2.2.5 其它

做条件自动转换

如果在if , while 条件后面写一个值当条件时,他会默认转换为布尔类型,在做条件判断。

2.3 字符串

2.3.1 定义

v1 = "Grit"

2.3.2 独有功能(18/48)

"xxx".功能()

v1= "xxx"
v1.功能()
  1. 判断字符串是否以XX开头,得到一个布尔值
v1.startswith("XX")
  1. 判断字符串是否以XX结尾头,得到一个布尔值
v1.endswith("XX")
  1. 判断字符串是否为十进制数,得到一个布尔值
resulet = v1.isdecimal()
print(result)
  1. 去除字符串两边的空格、换行符(\n)、制表符(\t)、得到一个新字符串
msg = "  he l l o "
data = msg.strip()   #去除两边空白
data = msg.lstrip()  #去除左边空白
data = msg.rstrip()  #去除右边空白

补充:去除字符串两边指定的内容

data = msg.strip("a")   #去除两边a
data = msg.lstrip("a")  #去除左边a
data = msg.rstrip("a")  #去除右边a
  1. 字符串变大写,得到一个新字符串
msg = "grit"
data = msg.upper()

print(msg)  #grit
print(data) #GRIT

注意是得到一个新的字符串
  1. 字符串变小写,得到一个新字符串
msg = "GRIT"
data = msg.lower()

print(msg)  #GRIT
print(data) #grit

注意是得到一个新的字符串
  1. 字符串内容的替换,得到一个新的字符串
data = "你是个好人,但是好人不适合我"
value = data.replace("好人","男人")
print (data) # "你是个好人,但是好人不适合我"
print (value) #"你是个男人,但是男人不适合我"
  1. 字符串切割,得到一个列表
data = "Grit|root|NB|bbb"
result = data.split("|")

print (result)  #输出["Grit","root","NB","bbb"]
result[0] = "Grit"
result[1] = "root"

result = data.split("|",2)# 从左往右,切2 

result = data.rsplit("|",2)# 从右往左,切2
  1. 字符串拼接,得到一个新的字符串
data_list = ["grit","B","A"]
v1 = "*".join(data_list)#"grit*B*A"
v2 = "".join(data_list)#"gritBA"
  1. 字符串格式化,得到新的字符串
text = "我是{0},今年20岁".format("grit")
text = "我是{0},今年{1}岁".format("grit",20)
text = "我是{0},今年{1}岁,真实姓名是{0}".format("grit",20)#复用
#可以简写成如下,效果一样:
text = "我是{},今年20岁".format("grit")
text = "我是{},今年{}岁".format("grit",20)
text = "我是{},今年{}岁,真实姓名是{}".format("grit",20,"grit")#不能复用
text = "我是{n1},今年20岁".format(n1="grit")
text = "我是{n1},今年{age}岁".format(n1="grit",age=20)
text = "我是{n1},今年{age}岁,真实姓名是{n1}".format(n1="grit",age=20)
text = "我是{n1},今年{age}岁"
data1=text.format("grit",20)
data2=text.format("niko",21)
  1. 字符串转换为字节类型
data = "嫂子"  #unicode  #字符串类型
v1 = data.encode("utf-8")  # utf-8 字节类型
  1. 将字符串内容居中、居左、居右展示
v1 = "Grit"
data = v1.center(2,"*")  #"*Grit*"
data = v1.ljust(2,"*")   # "Grit**"
data = v1.rjust(2,"*")   # "**Grit"
  1. Zfill 帮助填充 0 应用场景:处理二进制数据
data ="grit"
v1 =data.zfill(8) #"0000grit"

2.3.3 公共功能

  1. 相加:“字符串+字符串” (拼接)
  2. 相乘:“字符串”*整数 (几倍)
  3. 长度:len(data)
  4. 获取字符串中的字符,索引
message = "来点活"
print(message[0]) #"来"
print(message[1])
print(message[2])

print(message[-1])#"活"

注意:字符串中是能通过索引取值,无法修改值。【字符串在内部存储时不允许对内部元素修改,想修改只能重新创建。】

  1. 获取字符串中的子序列,切片
message = "aabaa"
print(message[0:2]) aab
print(message[2:])baa
print(message[:3])aaba
  1. 步长,跳着去字符串的内容
name ="生活不止眼前的苟且,还有诗和远方的田野。"

print(name[0:5:2])  #输出:生不跟【前两个值表示区间范围,最后一个值表示步长】
print(name[:8:2])  #输出:生不眼的且【区间范围的前边不写则表示起始范围从0开始】
print(name[0::3])  #输出:生止的,诗方野【区间范围的后边不写则表示结束范围为最后】
print(name[::3])  #输出:生止的,诗方野【区间范围不写表示整个字符串】
print(name[2:1:-1])  #输出:不活【倒叙】
  1. 循环
  • while循环
  • for循环
messgae = "Grit"
for char in message:
     print(char)
  • range,帮我们创建一系列数字(列表形式)
  • for + range
for i in range(5):#[0,1,2,3,4]
print(i)

一般应用场景:

  • while ,一般在做无限制(未知)循环处时使用。
  • for ,一般应用在已知的循环数量的场景。
  • 都可以应用break和continue。

2.3.4 转换

一般情况下,只有整形转字符串才有意义。

2.3.5 其它

字符串不可被修改

2.4 列表

列表(list),是一个有序且可变的容器,在里边可以存放多个元素。

2.4.1 定义

user_list = ["ak","m4","awp"]
data_list = ["ak","2700"]
data_list.append("awp")
print(data_list)#ak , 2700 ,awp

不可变类型:字符串、布尔、整形(已最小、内部数据无法进行修改)
可变类型:列表(内部数据元素可以修改)

2.4.2 独有功能

  1. 追加
data_list.append()
  1. 批量追加 ,将一个列表中的元素逐一添加到另一个列表
tools=["a","b","c"]
tools1=["1","2"."3"]
tools.extend(tools1) # a,b,c,1,2,3
  1. 插入,在原列表的指定索引位置插入值
user_list =  ["niko","zywoo","simple"]
user_list.insert(0,"ropz")#ropz,niko,zywoo,simple
user_list.insert(2,"device")#ropz,niko,zywoo,device,simple
  1. 在源列表中根据值删除(从左到右找到第一个删除)【慎用,里边没有会报错】解决办法,先判断,再删除。
user_list =  ["niko","zywoo","simple"]
user_list.remove("simple")
  1. 在源列表中根据索引踢出某个元素(根据索引位置删除)
user_list.pop()  #不填写默认踢出最后一个
user_list.pop(2)  #踢出指定位置
data = user_list.pop(2) #可以将制定踢出值 赋值给其它变量
  1. 清空原列表
user_listy=.claer()
  1. 根据值获取索引(从左到右找到第一个删除)【慎用,里边没有会报错】解决办法,先判断,再删除。
rank  = user_list.index("niko") # 1
  1. 列表元素排序 从小到大排序
#数字排序
num_list=[4,3,2,1,5,6,7]
num_list.sort()  #1,2,3,4,5,6,7 
num_list.sort(reverse = True)  #从大到小排
#字符串排序  
user_list =  ["niko","zywoo","simple"]
user_list.sort()

字符串排序 是将字符串的每一个字符转换至Unicode 码典,然后再进行比较。
注意:排序时内部元素无法进行比较时,程序会报错(尽量数据类型统一)

  1. 反转原列表
user_list = ["niko","zywoo","simple"]
user_list.reverse()

2.4.3 公共功能

  1. 相加
    将两个列表拼接。得到新列表
  2. 相乘
    列表*整形 将列表中的元素在创建N份并生成一个新的列表
  3. 运算符 in 包含
    由于列表内部是由多个元素组成,可以通过in来判断是否在列表中
user_list = ["niko","zywoo","simple"]
result =  "niko"  in  user_list
result =  "niko"  not in  user_list
  1. 获取长度
user_list = ["niko","zywoo","simple"]
len(user_list)
  1. 索引(单个元素)
#读
user_list[0]
#改
user_list[0] = "simple"
#删
del user_list[0]
  1. 切片(多个元素)
    也可以进行 读 改 删
  2. 步长
  3. for循环
    注意:千万不要在循环的过程中,边循环获取列表的数据,边删除列表的数据。解决方案,倒着处理。

2.4.4 转换

  • int、 bool 无法转换成列表
  • str
name =  " grit"
data= list(name)
  • 超前
v1 = (11,12,13) #元组
vv1 = list(v1)

v2= {"alex","dsb"."asc"}#集合
vv2 = list(v2)

2.4.5 其它

嵌套
列表属于容器,内不可以存放各种数据,所以他也支持列表的嵌套。

data = ["谢广坤",["海燕","赵本山"],True,[11,22,33,44],"宋小宝"]
print (data[0]) # 谢广坤
print (data[1]) #["海燕","赵本山"]
print (data[0][2])# "坤"
print (data[1][-1]) # "赵本山"

2.5 元组

2.5.1 定义

有序,则不可变的容器,在里边可以存放多个不同类型的元素。

v1 = (11,22,33)
v2 = ("李杰","alex")
v3 = ("true",True)

注意:建议在元组的最后多加一个都厚,用于标识他是一个元组。

2.5.2 独有功能

2.5.3 共有功能

  1. 相加,两个列表相加获取生成一个新的列表。
  2. 相乘,列表*整形,将列表中的元素在创建N分并生成一个新的列表。
  3. 获取长度
  4. 索引
  5. 切片
  6. 步长
  7. For 循环

2.5.4 转换

其它类型转换为元组,使用tuple(其它类型),目前只有字符串和列表可以转换为元组。

2.5.5嵌套

由于元组和列表都可以充当容器,他们内部可以放很多元素,并且也支持元素内的嵌套。

2.6 集合

集合是一个 无序、可变、不允许数据重复的容器。

2.6.1 定义

v1={11,22,33,"alex"}
  • 无序,无法通过索引取值
  • 可变,可以添加和删除元素
  • 不允许数据重复
    一般什么时候用集合?
    就是需要维护一大堆不重复的数据时,就可以用。
    注意: 定义空集合时,只能用 v = set(),不能用v={}(这样是定义一个空字典)

2.6.2 独有功能

  1. 添加元素
data = set()
data.add("GRE")
data.add("TOFFU")
data.add("CET")
  1. 删除元素
data.doscard("CET")
  1. 交集
s1 = {"1","2"."3"}
s2 = {"2"."4"}

s4 =  s1.intersection(s2)
s3 = s1 & s2      #简单表述(简写)
  1. 并集
s5 = s1.union(s2) 
s5 = s1 | s2 #简单表述(简写)
  1. 差集
s6 = s1.difference(s2)     #差集,s1中有且s2中没有的值
s6 = s1 - s2               #差集,简写

2.6.3 公共功能

  1. 减,计算差集
  2. &,计算交集
  3. | ,计算并集
  4. 长度
v= {"2","8"}
data =  len(v)
  1. for 循环
v = {"1","2","3"}
for item in v:
	print (item)

2.6.4 转换

其它类型如果想要转换集合类型,可以通过set 进行转换,并且如果数据有重复自动剔除。
提示:Int\list\tuple\dict 都可以转换成集合

v1  = "adaddwa"
v2 = set (v1)

2.6.5 其它

  • 集合的元素必须可哈希。
    目前可以哈希的数据类型:int 、bool、 str 、 tuple(元组),而 list 、set(集合)是不可哈希的。所以,集合的元素只能是:int 、bool、 str 、 tuple(元组)。
  • 集合的查找速度特别快
    因存储原理特殊,集合的查找效率非常高(数据量大了才明显)
  • 对比和嵌套

    注意:由于 True 和 False 本质上存储的是1 和 0,而集合又不允许重复。

2.5 None

None 意味着这个值啥都不是 或 表示为空,和其它语言中 NULL 作用一样。
在一定程度上可以帮助我们省去内存。
所以None 在布尔类型中 表示 False。

2.6 字典(dict)

字典是 无序 、 键不重复 且 元素只能是 键值对 的 可变的 个 容器。

data = {"k1":1,"k2":2}  #冒号前面是键,后面是值。
  • 容器
  • 元素必须键对
  • 键不重复,重复会被后面覆盖
  • 在Python 3.6 以后是有序,之前是无序。

2.6.1 定义

v1 = {}
v2 = dict{}
data = {
	"k1" : 1
	"k2" : 2
}
info  =  [
	"age" : 12,
	"name": "grit",
	"score": 470	
}

字典中对键值得要求:

  • 键 :必须可哈希,目前可以哈希的数据类型:int 、bool、 str 、 tuple(元组),而 list 、set(集合)、dict(字典)是不可哈希的。
  • 值:任意类型

一般什么时候用字典?
当我们想要表示一组固定信息时,用字典可以更加直观

2.6.2 独有功能

  1. 获取值
info  =  [
	"age" : 12,
	"name": "grit",
	"score": 470	
}
data = info.get{"age"}

写代码准则:简单的逻辑放在前面,复杂的逻辑放在后面。

  1. 获取所有的键
info  =  [
	"age" : 12,
	"name": "grit",
	"score": 470	
}
data = info.keys()
  1. 获取所有的值
info  =  [
	"age" : 12,
	"name": "grit",
	"score": 470	
}
data = info.values()
  1. 所有的键值
info  =  [
	"age" : 12,
	"name": "grit",
	"score": 470	
}
data = info.items()
  1. 设置值
info  =  [
	"age" : 12,
	"name": "grit",
	"score": 470	
}
data = info.setdefault("add",30)
  1. 更新字典键值对
data = info.update("add",30)
  1. 移除制定键值对
data = info.pop("add",30)
  1. 按照顺序移除
data = info.popitem()

py3.6之后移除最后一个值。
py2.6之前随机移除一个值。

2.6.3公共功能

  1. 求并集 | (py3.9新加入)
  2. 长度
  3. 是否包含
  4. 索引(键)
    字典不同于元组和列表,字典索引的是键,而列表和元组则是 0 、 1、 2 等数值。
  5. 根据 键 修改值 和 添加值 和 删除键值对
    通过键可以找到字典中的值,通过键也可以对字典进行添加和更新操作
  6. for 循环
    由于字典也属于容器,内部可以包含多个键值对,可以通过循环对其中的:键、值、键值进行循环;

2.6.4 转换

想要转换为字典

V = dict ()

2.6.5 其它

  1. 速度快
  2. 字典的键必须可哈希(list\set\dict不可哈希)
  3. 字典的值可以是任意类型的
  4. 集合元素必须可哈希(list\set\dict不可哈希)
  5. 字典的键必须可哈希(list\set\dict不可哈希)
  6. 字典的键 和 集合的元素 遇到 布尔值 0.1时 需要注意重复的情况。
  7. 元组的元素不可以被替换。

2.7 浮点型(float)

  1. 在类型转换时需要,在浮点转换为整形时,会将小数部分去掉。
  2. 可以保留小数点后N位
v1 = 3.1415926
result = round (v1,N)
  1. 浮点型在计算的时候,会不是精确计算。(坑)

3.总结和补充

  1. 简单的逻辑先处理,复杂的逻辑后处理。
  2. 尽量少循环,多干事。
  3. PASS
    一般python的代码块是基于 缩进 和 : 来实现的,Python 中规定代码块中必须要有代码才算完整,在没有代码的情况下,为了保证语法的完整性,可以用PASS代替。
  4. is 和 ==
    == 用于表示两个值是否相等。
    is 用于标识内存地址是都一致。
  5. 位运算
    & , 与 (二进制 都1 则1)
    | ,或 (二进制 有1 则1)
    ^ , 异或 (二进制 不同则1)
    ~ ,取反 (二进制取反)
    << , 左移 (二进制向左移两位)

,右移 (二进制向右移动两位)