Python教程[顺序の章]3:数据类型int,float,str

-呈阶梯状分布- 114 次阅读 3121 字 发布于 2026-05-09 最后更新于 2026-08-03 Python教程


数据类型

如前面提到的字符串(str)和整型(int),以及还没提到的浮点型(float)和布尔值(bool),都是Python中的基础数据类型。每一个值,都有自己对应的数据类型。
对于字面量"我是一条字符串"而言,字符串就是他的类型;对于字面量9331而言,整型就是他的类型;对于被赋值为4637的变量a而言,整型就是他的数据类型;对于被赋值为"九三三一"的变量b而言,字符串就是他的数据类型。
想要知道每个数据对应的数据类型,可以使用type()函数。在括号内放入想知道类型的值,则type()的返回值是其类型。

print(type(1234028))
print(type("1234241"))
a = 0
b = "0"
print(type(a))
print(type(b))
# 运行结果:
# <class 'int'>
# <class 'str'>
# <class 'int'>
# <class 'str'>

整型int 浮点型float

在生活中,有整数和小数,而Python中,对应的就有整型和浮点型。
这两种类型的值都可以用字面量生成。

a = 108
b = 10.8
print(type(a))
print(type(b))
# 运行结果:
# <class 'int'>
# <class 'float'>

在整型和整型,浮点型和浮点型,整型和浮点型之间,可以做数学运算。
常见的运算符号有+,-,*(乘号),/(除号),除此之外还有**(幂运算符),%(取模),//(商为整数是为取商的整数部分,商为负数时为原商的向下取整)。
两个int或float类型的值中间放上运算符,就能生成运算结果,获取结果只需要把整个运算式作为值调用即可,类似于获取函数的返回值。
其中,整型与整型运算返回值任然是整型。但是,如果任意一个参与运算(哪怕是多项式运算)的数据是浮点型,那么返回值类型就是浮点型。

a = 178
b = 13
print(a + b)
c = a + b
print(c)
print(type(a + b))
print(type(10 - 99))
print(type(1 + 0.5))
print(type(0.5 + 0.1))
print(type(0.5 + 0.5))
print(0.5 + 0.5)
# 运行结果:
# 191
# 191
# <class 'int'>
# <class 'int'>
# <class 'float'>
# <class 'float'>
# <class 'float'>
# 1.0

可以看到,即使0.5+0.5的结果应当是1,但是Python输出的类型任然是float,并且结果为1.0。

在Python内,有许多函数可以为int和float的计算提供帮助。使用f(你的数据)可以生成所需的返回值。

abs(x)返回数字的绝对值,如abs(-10) 返回 10
ceil(x)返回数字的上入整数,如math.ceil(4.1) 返回 5
exp(x)返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045
fabs(x)以浮点数形式返回数字的绝对值,如math.fabs(-10) 返回10.0
floor(x)返回数字的下舍整数,如math.floor(4.9)返回 4
log(x)如math.log(math.e)返回1.0,math.log(100,10)返回2.0
log10(x)返回以10为基数的x的对数,如math.log10(100)返回 2.0
max(x1, x2,...)返回给定参数的最大值,参数可以为序列。
min(x1, x2,...)返回给定参数的最小值,参数可以为序列。
modf(x)返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。
pow(x, y)x**y 运算后的值。
round(x [,n])返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。其实准确的说是保留值将保留到离上一位更近的一端。
sqrt(x)返回数字x的平方根。

字符串str

前面我们了解了,字符串类型可以用引号创建,如"我是字符串"。
这里补充一下,单引号和双引号都可以在Python中创建字符串,效果相同。

在Python中,代码被一行一行的读取,这也就意味着我们无法跨行写多行字符串,那么,有没有什么方法,可以实现多行字符串?
首先,是三对引号("""我是字符串"""),被三对引号包裹的字符串可以跨行,任然可以被正常print()。

print("""第一行
第二行
第三行""")
# 运行结果:
# 第一行
# 第二行
# 第三行

其次,还有一种方法——转义符号\n。在Python中,反斜杠\加上一些特定的字符可以触发特殊的效果,我们称这种把正常字符前加上\来改变用法的行为为转义。

\'代表一个单引号
\"代表一个双引号
\\代表一个反斜杠
\n换行
\r返回光标至首行
\f换页
\v垂直制表符
\t水平制表符
\b删除一个字符再打印,相当于 Backspace 按键
\0空字符 Null
\0oo三位的八进制数表示的字符
\xXX两位的十六进制数表示的字符

我们常用的是\n,\',\",\\。因为引号为被Python识别为字符串标识,所以想要在字符串内打出引号就要使用反斜杠+引号来表示;反斜杠是同理,因为会被识别为转义标识,所以想要在字符串内打出反斜杠就要使用双反斜杠\\。
而\n代表的是换行,可以在同一行Python代码内对字符串执行换行操作。

print("第一行\n第二行\n第三行")
# 运行结果:
# 第一行
# 第二行
# 第三行

而print()执行输出的时候,其实自动在每个字符串末尾加上了\n,所以我们每使用一次print()就会换到下一行输出新内容,而不是在原先的行内输出。

print("第一行")
print("第二行")
print("第三行")
# 运行结果:
# 第一行
# 第二行
# 第三行

如果你不想要print()的自动换行操作,你可以对print()进行参数设置。
像print()这样的函数括号内填入的值叫参数,我们在print()内常填入的字符串就是一种参数。
而print()有一个隐藏参数——end。他的作用是改变print()在字符串末尾添加的值,当你不启用时,end默认为'\n',也就是换行。而我们只需要把end换成空字符串'',就可以实现不自动换行。

print("a", end='')
print("b")
print("c")
# 运行结果:
# ab
# c
print("a", end='')
print("b\n", end='')
print("c\n", end='')
# 运行结果:
# ab
# c

上面的两种代码实际上是等价的,通过对比你可以清晰地看出end的实质——不填写时在字符串末尾加'\n',填写时在字符串末尾加填入的值。

字符串可以通过str[int]的索引方式索引对应位置的字符。
比如,字符串a = "Hello World",其长度为11。索引会为字符串中的每个字符都分配一个对应的号数,叫做下标。从"H"到"d"分别为0、1、2、3、4、5、6、7、8、9、10。Python中的下标都是从0开始数,这是编程语言的惯例。而我们想知道对应位置的字符,只需要在字符串后面加上中括号,括号内放入字符对应的下标即可。
例如,对于"H",我们可以通过a[0]的方式得到"H"这个值。这个逻辑可以从0到10类推,但不能超过最大下标,否则会报错。
我们可以通过负数下标从字符串最后一个字符往前查找,例如,对于"d",我们可以通过a[-1]的方式获取值。此时,顺序就是-1到-11,比如"H"既可以表示为a[0],又可以表示为a[-11]。
为防止因超出最大下标而导致的错误,我们可以使用len()函数。把想知道长度的字符串作为参数,就可以得到其长度的返回值,返回值类型为int。此时,假如len(a)为n,则a的下标范围是0到n-1。

a = "ladder"
b = 'step'
print(a[0])
print(b[-4])
print(len(a))
print(b[len(b)-1])
# 运行结果:
# l
# s
# 6
# p

字符串可以通过切片操作获取其中的部分字符,操作为str[int:int:int],其中,中括号内的三个值分别代表起始位置,结束位置,步长。其中,起始位置和结束位置遵循左闭右开原则,也就是[start, end),因此,end的最小值为1,最大值为最大下标+1,而start的最小值为0,最大值为最大下标。而步长则代表了每间隔多少字符取一个字符。
在不填写的情况下(str[::]),起始位置默认值为0,结束位置默认值为最大下标+1,步长默认值为1。

a = "ladder step"
b = a[:6:]
c = a[7::]
print(b)
print(c)
# 运行结果:
# ladder
# step

字符串可以通过+进行拼接。(str+str+...+str)

a = "ladder"
b = "step"
print(a+' '+b)
# 运行结果:
# ladder step

字符串可以通过*复制。(str*int)

a = "ladder"
print(a*3)
# 运行结果:
# ladderladderladder

字符串的拼接只限于str类型与str类型之间,那么,如果我们想同时输出str与int类型,应该怎么做呢?

第一个方法是在print()内使用逗号隔开,但这个方法只能在print()内使用,并且隔开的两个值之间会被插入一个空格。
如果想要两个值之间不插入空格,可以修改print()的sep参数。
这个参数类似于end,其在默认状态下为在逗号隔开的值中间插入' '(空格),你可以通过修改sep为''(啥也没有)来达成完美的拼接效果。

a = "ladder"
b = 666
print(a, b)
print(a, b, sep='')
# 运行结果:
# ladder 666
# ladder666

第二个方法是把int转化为字符串。
首先我们要知道,1和'1'是有着本质区别的。前者是int,后者是str;前者可以参与数学计算,但不可以拼接于字符串;后者可以拼接于字符串,但不能参与数学计算。
我们想让int和字符串拼接,只需要把int转为str就可以了,也就是把1转化为'1'。
这里可以用str()生成,只需要把int类型的值放入括号并重新赋值,就可以变成str类型的值。
注意,这里的str()并不是函数,而是一个类,返回值也不是一个单纯的值,而是一个对象,在后期会学习到,这里可以先把str()当转化为str类型的函数用。

a = "ladder"
b = 666
b = str(b)
print(a+b)
# 运行结果:
# ladder666

顺带一提,input()函数的返回值是str类型的,所以不能参与数学运算。但是,当我们希望用户输入的值可以参与数学运算时,我们就可以在input()外套一层int()把str转化为int类型,int()于str()原理类似。

num = int(input("请输入你的年龄:"))
print("你十年后"+str(num+10)+"岁")
# 用户输入:
# 18
# 运行结果:
# 你十年后28岁

第三个方法是利用格式化字符串。我认为string.format的方式有点落后难用,我这里介绍f-string这种格式化字符串。
首先,格式化字符串不是"我是字符串",而是f"我是字符串",区别就在于在引号前加了一个f,代表格式化。
然后,你就可以在字符串中插入大括号,并在大括号内填入不同类型的值或表达式。如果是值,值会被转为字符串类型并拼接;如果是变量,就会取变量内的值转为字符串类型并拼接;如果是表达式,例如1+1,那么就会把表达式的结果,也就是2,转化为字符串类型并拼接。

num = int(input("请输入你的年龄:"))
print(f"你十年后{num+10}岁")
# 用户输入:
# 18
# 运行结果:
# 你十年后28岁

怎么样,用f-string改过后的程序,是不是明显比上面的更简洁,可读性更高了?