Python基础(二)--数据类型,运算符与流程控制

 

目录

 

                Python基础(二)--数据类型,运算符与流程控制

1 数据类型

1.1 Python中的数据类型

1.2 整数类型(int)

1.3 布尔类型

1.4 浮点类型

1.5 复数类型

1.6 类型转换

2 运算符

2.1 算术运算符

2.2 布尔运算符

2.3 比较运算符

2.4 位运算符

2.5 赋值运算符

2.6 运算符优先级

3 流程控制

3.1 选择结构

3.2 循环结构


                Python基础(二)--数据类型,运算符与流程控制

1 数据类型

1.1 Python中的数据类型

在Python中,数据可以分为如下类型:

数值类型

整数类型:int

浮点类型:float

复数类型:complex

布尔类型:bool 
序列类型

列表:list

元组:tuple

字符串:str

字节:bytes

映射类型:dict 
集合类型:set 
其他内置类型 

注意:①变量本身严格来说是没有类型的,其所关联的对象类型,这与其他语言的差别较大(C,Java等)。因此,我们常习惯的成Python的类型为“鸭子类型”,这是一种动态类型的体现;②由于变量必须要关联一个具体的对象,才能确定变量的值,所以在定义变量时,不能只给出变量的名字,必须同时要给出变量多关联的对象;③Python2中还支持长整数类型(long),在Python3中取消。

1.2 整数类型(int)

我们数学上使用的整数,例如,3,-50等,这些都是整数类型。整数类型支持四种进制表示:①二进制(使用0b或0B前缀)②八进制(使用0o或0O前缀)③十进制(无前缀)④十六进制(使用0x或0X前缀,10 ~ 15使用a ~ f或A ~ F表示)

# 二进制
x = 0b10111
print(x)
# 八进制
x = 0o666
print(x)
# 十进制
x = 6
print(x)
# 十六进制
x = 0x1f66
print(x)

结果为:,以十进制的形式显示

进制转换:①bin其他进制转换为二进制②oct其他进制转换为八进制③int其他进制转换为十进制④hex其他进制转换为十六进制

x = 666
print(bin(x))
print(oct(x))
print(int(x))
print(hex(x))

结果为:

注意:返回的不是数值,是字符串

分割符_:当数值较大时(尤其是二进制),对程序的可读性会造成影响,此时,我们可以在数值之间使用一个_进行分隔,从而提高程序的可读性(Python3.6)。

number = 1234_5665_4321

1.3 布尔类型

布尔类型(bool)表示的是一种条件的判断,具有两个值:True与False。其中,True表示条件成立,即为“真”,而False表示条件不成立,即为“假”。

布尔类型是整数类型的子类型。实际上,True就是1,False就是0。因而,我们也可以使用布尔类型参与数学上的运算,与使用1与0参与运算的结果是一样的。

1.4 浮点类型

浮点类型(float)就是数学上的小数类型。例如:6.0,-6.6等,都是浮点类型。在进制表示上,浮点类型仅支持十进制表示(这点不同于整数类型)。除了常规的表示方式外,浮点类型也可以使用数学上科学计数法的形式表示,例如:6.6e30

注意:①十进制的整数类型不能使用0开头,但是,浮点类型可以以0开头。②浮点类型具有两个特殊值:NaN(Not A Number)与Infinity(无穷大),其中无穷大又可分为正无穷(+Infinity)与负无穷(-Infinity)。我们可以通过float函数来获得这些值。NaN有一个特征,就是自己不等于自己,因此,我们不能通过==来判断一个数值是不是NaN。

import sys
# 浮点类型的范围与实现有关,通常使用程序中的double类型来实现
f = 6.6e666
print(f)
print(sys.float_info)
print(sys.float_info.max)
print(sys.float_info.min)

结果为:

# float类型的特殊值
print(float("NaN"))
print(float("Infinity"))
n = float("NaN")
# NaN是特殊的值,不等于任何值,包括自身
print(n == n)
# 因为NaN不等于任何值,所以不能用==进行判断,而是使用math提供的函数isnan进行判断,如果参数是nan,则返回true,否则返回False
import math
print(math.isnan(n))

结果为:

浮点类型的不精确性:

在使用浮点类型时,我们需要留意,浮点类型在计算机中仅是近似的存储,浮点类型是不精确的。因此,我们要避免进行如下的操作:①避免数量级相差很大的浮点值之间进行运算②避免进行等量的比较。

# 避免数量级相差很大的两个浮点数进行计算
f1 = 6e20
f2 = 6
print(f1 + f2)
# 避免进行等量的判断
f1 = 0.1
f2 = 0.2
print(f1 + f2)
print(f1 + f2 == 0.3)

考虑到浮点类型的不精确性,因此,如果我们需要进行精确计算时,我们可以使用decimal模块中的Decimal类来实现,该类提供精确的浮点计算。此外,我们也可以指定Decimal的计算精度,即计算结果最多保留的有效数字位数,默认为28位有效数字。

但是Decimal要慎用,因为非常消耗性能

# Decimal类型进行精确的浮点计算
import decimal
x = decimal.Decimal(0.1)
y = decimal.Decimal(0.2)
print(x)
print(y)
# Decimal计算,默认有28位有效数字
# 获取decimal计算上下文环境后,即可设置有效位数
context = decimal.getcontext()
context.prec = 10
x = decimal.Decimal(0.1)
y = decimal.Decimal(0.2)
print(x + y)

1.5 复数类型

复数类型(complex)类似于数学上的复数。含有虚部(使用j或J后缀)的数值为复数类型。例如:3 + 5j,-2 - 3j(数学中虚部后缀为i)。复数分为实部与虚部两个部分,我们可以通过real与imag属性分别获取复数的实部与虚部的值。

x = 6 + 8j
print(x.real)
print(x.imag)

1.6 类型转换

(1)获取数据类型

我们可以通过type函数获取变量的类型,准确的讲,应该是变量所关联的对象的类型。

a = 6
b = 6.6
c = 6 + 8j
# int,float,complex可以进行混合运算,结果类型为参与运算的数据类型中较高的一个:int<float<complex
print(type(a + b))
print(type(a + c))
print(type(b + c))

(2)类型转换函数

Python中为我们提供了如下的转换函数:

①int(value):将数值类型或字符串转换为整数(int)类型。如果没有参数,返回0

②float(value):将数值类型或字符串转换为浮点(float)类型。如果没有参数,返回0

③complex(real,imag):根据实部与虚部(可选)创建一个复数。如果没有参数,返回0j

④bool(value):参数为真值时,返回True,否则返回False

a = 6
b = 6.6
c = True
d = 6 + 8j
# float类型转换为int类型时,去掉小数点后面的内容,取整数部分,int,float转换成complex时,虚部为0
print(int(b))
print(complex(a))
print(complex(b))
# 注意:复数类型就不能够通过int或float转换为整数或浮点类型。
# print(int(d))  这是不合法的# 在Python中任何类型都能转换成bool类型。True就是1,False就是0
print(bool(0),bool(6),bool(6.6),bool(6+6j))
print(int(True),int(False),float(True),float(False),complex(True),complex(False))

其他:①int函数还可以提供第二个参数,指定解析转换时,使用的进制。此时,第一个参数需要是字符串类型(或字节等类型),不能是数值类型。例如:int(“600”, 16),则会根据16进制来解析600。如果没有指定第二个参数,则默认为十进制。

2 运算符

运算符,即具有特殊计算规则的符号。运算符涉及到的,参与运算的数据,称为操作数。不同的运算符,涉及的操作数也不相同。由运算符与操作数结合起来的计算式,称为“表达式”。

运算符可分为:算术运算符;布尔运算符;比较运算符;位运算符;赋值运算符

2.1 算术运算符

用来进行类似数学上的加减乘除运算

符号

说明

x + y

加法运算,返回x与y的和。

x – y

减法运算,返回x与y的差。

x * y

乘法运算,返回x与y的积。

x / y

除法运算,返回x与y的商(浮点类型)。

x // y

除法运算,返回x与y的商(向下取整)。

x % y

取模运算,返回x模y的结果。

x ** y

乘方运算,返回x的y次方。

+x

正号,x的值不会改变,该符号可以省略。

-x

负号,取x的相反数。

在除法运算时,除数不能为0,否则会产生错误(ZeroDivisionError)。

取模运算(“Module Operation”)和取余运算(“Complementation ”)两个概念有重叠的部分但又不完全一致。主要的区别在于对负整数进行除法运算时操作不同。

取余与取模的差别:取余向0取整(余数符号与被除数相同),取模向下取整(余数符号与除数相同)。

被除数 - 除数 * 商 = 余数,被除数 = 除数 * 商 + 余数

# 正数的取余运算与取模运算结果一样
print(7 % 4) 
# 负数的取模运算:
# 被除数为-7,除数为4,商为-1.75,向下取整为-2(取模),向0取整为-1(取余)
# 根据公式:被除数 - 除数 * 商 = 余数 得 -7 - 4*(-2)=1
print(-7 % 4)

2.2 布尔运算符

布尔运算符也称逻辑运算符

符号

说明

x and y

如果x为True,返回y,否则返回x。

x or y

如果x为True,返回x,否则返回y。

not x

如果x为True,返回False,否则返回True。

x与y可以是任意类型,因为在Python中,任意类型都可以转换为布尔类型。

# and连接两个表达书,表示并且。两个表达式都为True,整个表达式才为True
print(6 == 8 and 6 ==6)
# or连接两个表达式,表示或。两个表达式中有一个为True,整个表达式为True
print(6 == 8 or 6 ==6)
# not表示对条件的否定。True-》False。False-》True
print(not True)

注意:and与的表达式未必一定是bool类型,可以是任意类型,因为任何类型都可以转换成bool类型

# and,如果如果第一个表达式为False,第二个表达式不是True或False,则返回第一个表达式;如果第一个表达式为True,则返回第二个表达式
# or,与and相反,如果第一个表达式为True,返回第一个表达式,否则返回第二个表达式
print(6 and "a")
print(6 or "a")
#and与or的短路操作,当and的第一个表达式为False,或者or的第一个表达式为True,此时就可以确定整个表达式的值,第二个表达式会直接跳过,不会执行
print(0 and print("不执行"))

2.3 比较运算符

比较运算符执行的是比较运算,如果表达式成立,返回True,否则返回False。

符号

说明

x > y

如果x大于y,返回True,否则返回False。

x >= y

如果x大于等于y,返回True,否则返回False。

x < y

如果x小于y,返回True,否则返回False。

x <= y

如果x小于等于y,返回True,否则返回False。

x == y

如果x等于y,返回True,否则返回False。

x != y

如果x不等于y,返回True,否则返回False。

x is y

如果x与y是同一个对象,返回True,否则返回False。

x is not y

如果x与y是不同的对象,返回True,否则返回False。

在Python语言中,比较运算符支持链式比较,在java语言中是不支持的。x < y < z相当于x < y and y < z,不同之处仅在于,后者中y只会计算一次。链式比较与拆分成and或or连接的表达式一样,也会进行短路操作。

is与==,is not与!=的区别在于,==与!=比较的是对象内部的值是否相等,而is与is not比较的是两个对象是否为同一个对象。

 

2.4 位运算符

位运算符提供的是对位(bit)进行的操作。位运算符的操作数要求是整数类型(布尔类型)。位运算符如下表所示

符号

说明

x & y

x与y按位与运算,如果两个位都是1,结果为1,否则结果为0(有0则结果为0)。

x | y

x与y按位或运算,如果两个位都是0,结果为0,否则结果为1(有1则结果为1)。

x ^ y

x与y按位异或运算,如果两个位相同,则结果为0,如果两个位不同,则结果为1(有1则为1,但又不同时为1)。

x << y

将x向左移动y位,右侧以0进行填充。y不能为负值,否则会产生ValueError。

x >> y

将x向右移动y位,左侧以符号位进行填充。y不能为负值,否则会产生ValueError。

~x

对x进行按位取反,即1变为0,0变为1。

注意:布尔类型作为整数类型的子类型,也可以参与位运算,但是,最好不要这样,因为布尔类型的作用是进行逻辑上的判断,而不是当成数值1与0参与数学运算。

 

2.5 赋值运算符

赋值运算符包括简单赋值运算符与复合赋值运算符。

符号

说明

x = y

简单赋值运算。即x关联y所关联的对象。

x op= y

复合赋值运算。op可以是任意二元算术运算符与二元位运算符。

x op= y相当于x = x op y。例如x += y相当于x = x + y。

 

2.6 运算符优先级

同一行的运算符具有相同的优先级从高到低进行排列。如下:

运算符优先级

.    ()    []

**

+(正号)    -(负号)    ~

*    /    //    %

+    -

<<    >>

&

^

|

in    not in    is    is not    <    <=    >    >=    ==    !=

not

and

or

=    op=(+ - * / // % ** >> << & ^ |)

当我们在使用表达式,无法确定优先级时,我们可以使用小括号()来调整表达式的结合性,小括号()的优先级是最高的。

 

3 流程控制

流程:即程序执行的过程。程序的三种结构:顺序结构(按部就班,自顶而下的去执行的);选择结构;循环结构

3.1 选择结构

(1)if

缩进的语法:缩进大小随意,但是要保持一致。按照惯例,使用4个空格。

if 表达式:

    if语句体

如果表达式为True,或者可以转换为True则执行语句体,否则不执行

age = 20
if age >18:print("成年了")
print("没有缩进,不是if的语句体")

(2)if-else

提供两条分支。

age = 16
if age >18:print("成年了")
else:print("未成年")

(3)if-elif

可以实现多分支判断,if-else只能实现两分支判断

if 表达式:

    语句体

elif 表达式:

    语句体

更多的elif 表达式:

    语句体

# 注意:多分支选择条件有包含关系,需要将范围小的放在前面,范围大的放在后面
number = int(input("输入数字"))
if number > 90:print("A")
elif number > 80:print("B")
elif number > 70:print("C")
elif number > 60:print("D")

(4)if-elif-else

if 表达式:

    语句体

elif 表达式:

    语句体

...

else:

    语句体

# 注意:多分支选择条件有包含关系,需要将范围小的放在前面,范围大的放在后面
number = int(input("输入数字"))
if number > 90:print("A")
elif number > 80:print("B")
elif number > 70:print("C")
elif number > 60:print("D")
else:print("E")

(5)if-else的简化

类似于其他语言中的三元运算符。格式为:

    表达式1 if 条件表达式 else 表达式2

其中,条件表达式执行条件判断,如果条件表达式的值为True,则返回表达式1的值,否则返回表达式2的值。

number = int(input("输入数字"))
print("小" if 1<= number <3 else ("大" if 3<= number<6 else "输入有误"))

(6)if嵌套

if是嵌套使用的,用来多层选择分支的判断。

gender = "男"
age = 20
if gender == "男":print("男性")if age >= 18:print("做苦力")else:print("玩耍")
else:print("女性")if age >= 18:print("做饭")else:print("玩耍")

(7)断言

断言:判断某些语句是否正确。通过断言,我们可以为应用程序加入调试信息,从而检测程序关键点位置的准确性。

断言使用assert关键字,语法格式为:

    assert 表达式        或          assert 表达式,错误信息

在执行断言语句时,会对表达式1进行求值,如果该值转换为布尔类型后为False,则会产生错误信息。其中,第二种形式的错误信息是可选的,如果给出错误信息,则会在表达式为False的时候,输出我们指定的错误信息。

断言有什么用处呢?我们可以自行通过if语句,使用raise抛出异常来实现啊。其实断言底层其实就是通过if语句判断与异常来实现的。

断言是通过__debug__来控制的,如果该变量为True,则会开启断言,进行判断,一旦断言表达式为False,就会产生异常。如果该变量为False,则不会开启断言,就算断言表达式为False,也不会产生异常(因为根本没有执行)。__debug__是Python中的内置常量值,该常量值默认为True,如果在运行Python时,命令行指定了-O选项,则该常量值为False。因此,我们可以方便的开启与关闭断言(通过-O选项)。这比使用if语句要灵活,因为使用if语句,程序会无条件的判断,无法进行控制。

password1 = input("请输入密码")
password2 = input("请再次输入密码")
# 设下断言,当两次密码一致才进行后续的操作
assert password1 == password2
print("继续执行")

3.2 循环结构

循环就是重复性的执行一件相同或相似的事情

(1)while

while 表达式:

    循环体

如果表达式为true则重复执行语句体

x = 0
y = 10
sum = 0
while x <= 10:sum += xx += 1
print(sum)

(2)for

for 变量 in 可迭代对象:

    循环体

对可迭代对象的每个值,依次赋值给变量,然后执行一次循环体

# range函数,能够产生一个区间的整数值,是一个可迭代对象
# range(end) 产生0-end区间的整数值,包括0,不包括end
# range(start,end) 产生start-end区间的整数值,包括start,不包括end
# range(start,end,step) 产生start-end区间的整数值,包括start,不包括end,step指定步长,默认为1
for x in range(2,10,2):print(x,end=" ")

(3)循环嵌套

循环嵌套,是指外层循环的内部,还有内层循环,即内层循环作为外层循环的循环体。当循环嵌套时,外层循环每执行一次,内层循环都会完整的执行一轮。如果外层循环会执行m次,内层循环会执行n次,则总共会执行m * n次。

for i in range(1,5):for j in range(1,i+1):print("*",end= "")print()

(4)break与else

break只能在循环中使用。else可以跟随在for或while循环之后,当循环正常执行完毕,会执行else语句,如果循环非正常执行完毕,而是通过break跳出循环,则else语句块不会得到执行。else语句是可选的。

# break用于提前完成任务,结束循环
for i in range(1,10):if i == 5:print("i为5")break
# for 与 while循环可以加上一个可选的else,如果循环没有因为break提前结束,则执行else语句体,否则不执行
num = 6
for i in range(1,10):if i == num:print("存在num")break
else:print("不存在num")

(5)continue

continue只能用在循环语句中。用来结束本次循环,开启下一次循环,对后续的循环没有影响

注意:break与continue基本只会用在选择判断中。无条件的break与continue虽然语法上没有错误,但从实际的角度来说是没有意义的。

# continue用来表示当前循环已经不满足条件时,可以使用continue提前结束本次循环,开启对下一个值进行判读。
for i in range(1,10):if i == 5:continueprint(i,end=" ")

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Kaggle微课程】Natural Language Processing - 3. Word Vectors

文章目录1. 词嵌入 Word Embeddings2. 分类模型3. 文档相似度练习&#xff1a;1. 使用文档向量训练模型2. 文本相似度learn from https://www.kaggle.com/learn/natural-language-processing 1. 词嵌入 Word Embeddings 参考博文&#xff1a;05.序列模型 W2.自然语言处理与词…

Django搜索工具——全文检索

全文检索不同于特定字段的模糊查询&#xff0c;使用全文检索的效率更高&#xff0c;并且能够对于中文进行分词处理haystack&#xff1a;全文检索的框架&#xff0c;支持whoosh、solr、Xapian、Elasticsearc四种全文检索引擎&#xff0c;点击查看官方网站whoosh&#xff1a;纯Py…

LeetCode 787. K 站中转内最便宜的航班(Dijkstra最短路径 + 优先队列)

文章目录1. 题目2. 解题1. 题目 有 n 个城市通过 m 个航班连接。每个航班都从城市 u 开始&#xff0c;以价格 w 抵达 v。 现在给定所有的城市和航班&#xff0c;以及出发城市 src 和目的地 dst&#xff0c;你的任务是找到从 src 到 dst 最多经过 k 站中转的最便宜的价格。 如…

Windows Phone 资源管理与换肤思考

Windows Phone 资源管理与换肤思考 原文 Windows Phone 资源管理与换肤思考 新入手一台Windows 8的笔记本&#xff0c;安装了VS2013后&#xff0c;终于又可以开发WP了。公司暂时不愿意开发WP&#xff0c;那么咱就自行研究吧&#xff01; 在没有WP开发环境的时候&#xff0c;曾经…

Django完成异步工具——celery

情景&#xff1a;用户发起request&#xff0c;并等待response返回。在本些views中&#xff0c;可能需要执行一段耗时的程序&#xff0c;那么用户就会等待很长时间&#xff0c;造成不好的用户体验&#xff0c;比如发送邮件、手机验证码等使用celery后&#xff0c;情况就不一样了…

Python基础(三)--序列

Python基础&#xff08;三&#xff09;--序列 1 序列相关的概念 1.1 什么是序列 序列是一种可迭代对象&#xff0c;可以存储多个数据&#xff0c;并提供数据的访问。 序列中的数据称为元素&#xff0c;Python内置的序列类型有&#xff1a;列表&#xff08;list&#xff09;…

项目上线最后工作——布署环境

当项目开发完成后&#xff0c;需要将项目代码放到服务器上&#xff0c;这个服务器拥有固定的IP&#xff0c;再通过域名绑定&#xff0c;就可以供其它人浏览&#xff0c;对于python web开发&#xff0c;可以使用wsgi、apache服务器&#xff0c;此处以wsgi为例进行布署服务器首先…

Python基础(四)--字典与集合

Python基础&#xff08;四&#xff09;--字典与集合 1 字典 1.1 什么是字典 字典提供的是一种映射存储的方式。字典分为两个部分&#xff0c;一个是键&#xff08;key&#xff09;&#xff0c;一个是key所关联的值&#xff08;value&#xff09;。&#xff0c;一个键关联&am…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(spacy)

文章目录1. 导入包2. 数据预览2. 特征组合3. 建模4. 训练5. 预测练习地址&#xff1a;https://www.kaggle.com/c/ds100fa19 相关博文&#xff1a; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;RNN/GRU/LSTM&#xff09; [Kaggle] Spam/Ham Email Classifi…

电商网站(Django框架)—— 大纲内容与基本功能分析

1. 项目架构 2. 数据库表结构 3. 数据库读写分离 4. Django读写分离配置 新建utils/db_router.py 课后阅读资料 http://python.usyiyi.cn/documents/django_182/topics/db/multi-db.html 5. 用户认证模型 注意&#xff1a; AUTH_USER_MODEL配置参数要在第一次迁移数据库之…

Python基础(五)--函数

目录 Python基础&#xff08;五&#xff09;--函数 1 函数的作用 1.1 函数定义与调用 1.2 函数的作用 1.3 空语句 2 参数与返回值 2.1 函数的参数 2.2 函数的返回值 2.3 返回多个值 3 参数的默认值 3.1 可选参数 3.2 参数的默认值 4 位置参数与关键字参数 4.1 关键…

LeetCode 1024. 视频拼接(动态规划/贪心)

文章目录1. 题目2. 解题2.1 动态规划2.2 贪心1. 题目 你将会获得一系列视频片段&#xff0c;这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠&#xff0c;也可能长度不一。 视频片段 clips[i] 都用区间进行表示&#xff1a;开始于 clips[i][0] 并于 clip…

电商网站(Django框架)—— 思维导图

1.用户模块&#xff1a;注册、登录、激活、退出、个人中心、地址 2.商品模块&#xff1a;首页、详情、列表、搜索 3.购物车&#xff1a; 增加、删除、修改、查询 4. 订单模块&#xff1a;确认订单页面、提交订单&#xff08;下单&#xff09;、请求支付、查询支付结果、评论 5.…

Python基础(六)--类与对象

目录 Python基础&#xff08;六&#xff09;--类与对象 1 类与对象的基本概念 1.1 什么是对象 1.2 什么是类 1.3 类与对象的关系 2 定义与初始化 2.1 类的定义 2.2 对象的初始化 2.3 动态增加属性方法 3 类成员 3.1 类属性与实例属性 3.2 类方法与实例方法 3.3 静态…

HTTP和HTTPS的请求和响应

HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff1a;是一种发布和接收 HTML页面的方法。 HTTPS&#xff08;Hypertext Transfer Protocol over Secure Socket Layer&#xff09;简单讲是HTTP的安全版&#xff0c;在HTTP下加入…

LeetCode 794. 有效的井字游戏(分类讨论)

文章目录1. 题目2. 解题1. 题目 用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中&#xff0c;玩家有可能将字符放置成游戏板所显示的状态时&#xff0c;才返回 true。 该游戏板是一个 3 x 3 数组&#xff0c;由字符 " "&#xff0c;"X&quo…

Requests: 让 HTTP 服务人类

Requests支持HTTP连接保持和连接池&#xff0c;支持使用cookie保持会话&#xff0c;支持文件上传&#xff0c;支持自动确定响应内容的编码&#xff0c;支持国际化的 URL 和 POST 数据自动编码。 Requests的文档非常完备&#xff0c;中文文档也相当不错。Requests能完全满足当前…

Python基础(七)--模块和包

目录 Python基础&#xff08;七&#xff09;--模块和包 1 模块 1.1 什么是模块 1.2 模块的使用 1.3 模块的搜索路径 1.4 模块的缓存 2 包 2.1 什么是包 2.2 包的使用 3 常用模块 3.1 math 3.2 random 3.3 time 3.4 datetime 3.5 sys Python基础&#xff08;七&am…

LeetCode 909. 蛇梯棋(BFS)

文章目录1. 题目2. 解题1. 题目 N x N 的棋盘 board 上&#xff0c;按从 1 到 N*N 的数字给方格编号&#xff0c;编号 从左下角开始&#xff0c;每一行交替方向。 例如&#xff0c;一块 6 x 6 大小的棋盘&#xff0c;编号如下&#xff1a; r 行 c 列的棋盘&#xff0c;按前…

爬虫必须学会的正则表达式

为什么要学正则表达式 实际上爬虫一共就四个主要步骤&#xff1a; 明确目标 (要知道你准备在哪个范围或者网站去搜索)爬 (将所有的网站的内容全部爬下来)取 (去掉对我们没用处的数据)处理数据&#xff08;按照我们想要的方式存储和使用&#xff09; 我们在昨天的案例里实际上…