查看全课大纲(第 8 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
Python 中,数字和布尔值究竟有哪几种?
约 6 分钟
小象实战讲义 · Python 编程从入门到实践
在前面的课时中,我们学习了如何创建和使用变量。你可能已经注意到,给变量赋值时,我们并没有像某些语言那样声明它的类型。那么,Python 是如何知道一个变量是数字还是文本的呢?本节将为你揭晓答案,并详细讲解 Python 中最基础的几种数据类型:整型、浮点型和布尔型。理解它们是后续学习更复杂数据结构(如字符串、列表)和进行条件判断、数学运算的基石。
💡 核心导读
- Python 是强类型语言:每个变量都有明确的类型,解释器会根据赋值自动推断。
- 三种基本数字类型:
int(整型)、float(浮点型)、complex(复数型,本节不展开)。 - 布尔类型:只有
True和False两个值,用于逻辑判断。 - 类型转换:使用
int(),float(),bool(),str()等函数在不同类型间转换。 - 运算符的多重含义:同一个运算符(如
+)对不同数据类型的行为可能完全不同。
Python 是强类型语言
在 Python 中,当你写下 a = 1 时,你并没有告诉 Python a 是一个整数。但是,Python 解释器会通过等号右边的值 1 来“猜测”或推断出变量 a 的数据类型应该是整数(int)。这种自动推断类型的能力,并不意味着 Python 是“无类型”的语言。恰恰相反,Python 是一门强类型的编程语言。
强类型意味着每个变量在创建时都有且只有一个确定的数据类型。这个类型决定了变量可以存储什么样的值,以及能对它进行什么样的操作。理解变量的类型,是避免程序出错的关键。
# 三种基本类型的变量,以及 42 和 42.0 的区别
a = 10
b = 3.14
c = True
integer_num = 42
float_num_1 = 42.0
float_num_2 = 42. # 数字后面加一个点,同样是浮点数 42.0
print("a 的类型是 {},值是 {}".format(type(a), a))
print("b 的类型是 {},值是 {}".format(type(b), b))
print("c 的类型是 {},值是 {}".format(type(c), c))
print("integer_num 的类型是 {},值是 {}".format(type(integer_num), integer_num))
print("float_num_1 的类型是 {},值是 {}".format(type(float_num_1), float_num_1))
print("float_num_2 的类型是 {},值是 {}".format(type(float_num_2), float_num_2))a 的类型是 <class 'int'>,值是 10
b 的类型是 <class 'float'>,值是 3.14
c 的类型是 <class 'bool'>,值是 True
integer_num 的类型是 <class 'int'>,值是 42
float_num_1 的类型是 <class 'float'>,值是 42.0
float_num_2 的类型是 <class 'float'>,值是 42.0数字类型:整型与浮点型
Python 中与数字相关的基本类型主要有两种:整型(int)和浮点型(float);此外还有复数类型(complex),本节不展开。
整型 (int)
整型代表没有小数部分的整数,可以是正数、负数或零。
- 示例:
1,-15,10000,0
浮点型 (float)
浮点型代表带有小数点的实数。即使小数部分是 .0,它也是浮点数。
- 示例:
1.5,-3.14,2.0 - 特殊写法:在 Python 中,
1.和1.0是等价的,都表示浮点数1.0。这种写法在一些科学计算代码中常见。
上面示例中的 integer_num 是整型,而 float_num_1 和 float_num_2 都是浮点型;后两者只是写法不同,值是同一个 42.0。
一个重要区别:整型是可枚举的(例如从1到10只有10个整数),而浮点型在任意两个数之间都有无穷多个值,是不可枚举的。因此,在计算机内部,1(整型)和 1.0(浮点型)的表示和处理方式是不同的。
布尔类型 (bool)
布尔类型只有两个可能的取值:True 和 False(注意首字母大写)。它主要用于逻辑判断和条件控制。上面第一个示例中的变量 c 就是布尔型,打印出的类型是 <class 'bool'>,值是 True。
类型转换
不同类型的数据之间经常需要转换。Python 提供了内置的类型转换函数,基本格式是:目标类型(待转换的值)。
int(x):将x转换为一个整数。如果是浮点数,会去掉小数部分(不是四舍五入)。float(x):将x转换为一个浮点数。str(x):将x转换为一个字符串。
# 示例:类型转换
is_raining = True
has_permission = False
a_int = 10
a_float = float(a_int) # 整型转浮点型
a_str = str(a_int) # 整型转字符串
a_bool = bool(a_int) # 整型转布尔型
b_float = 3.7
b_int = int(b_float) # 浮点型转整型(截断小数)
c_int = 0
c_bool = bool(c_int) # 0 转布尔型
print("is_raining 的类型是:{},值是:{}".format(type(is_raining), is_raining))
print("has_permission 的类型是:{},值是:{}".format(type(has_permission), has_permission))
print("a_float 的类型是:{},值是:{}".format(type(a_float), a_float))
print("a_str 的类型是:{},值是:{}".format(type(a_str), a_str))
print("a_bool 的类型是:{},值是:{}".format(type(a_bool), a_bool))
print("b_int 的类型是:{},值是:{}".format(type(b_int), b_int))
print("c_bool 的类型是:{},值是:{}".format(type(c_bool), c_bool))is_raining 的类型是:<class 'bool'>,值是:True
has_permission 的类型是:<class 'bool'>,值是:False
a_float 的类型是:<class 'float'>,值是:10.0
a_str 的类型是:<class 'str'>,值是:10
a_bool 的类型是:<class 'bool'>,值是:True
b_int 的类型是:<class 'int'>,值是:3
c_bool 的类型是:<class 'bool'>,值是:False运算符的类型敏感性
同一个运算符,作用在不同类型的变量上,可能产生完全不同的结果。这是初学时最容易混淆的地方之一。
- 对数字(int/float):
+是数学加法。 - 对字符串(str):
+是字符串拼接(连接)。
# 示例:加号 (+) 在不同类型间的行为
num_1 = 1
num_2 = 2
result_num = num_1 + num_2 # 数字相加
str_1 = "1"
str_2 = "2"
result_str = str_1 + str_2 # 字符串拼接
print("数字相加:{} + {} = {}".format(num_1, num_2, result_num))
print("字符串拼接:'{}' + '{}' = '{}'".format(str_1, str_2, result_str))
# 类型不匹配时 Python 会报错;这里用 try 捕获并打印错误信息
try:
print(1 + "2")
except TypeError as error:
print("类型不匹配:{}".format(error))
# 正确做法:先把整数转成字符串,再做拼接
age = 25
message = "我今年" + str(age) + "岁。"
print(message)数字相加:1 + 2 = 3
字符串拼接:'1' + '2' = '12'
类型不匹配:unsupported operand type(s) for +: 'int' and 'str'
我今年25岁。关键点:在进行运算前,你必须清楚操作数的类型。如果类型不匹配(例如试图用 + 连接一个字符串和一个整数),Python 会报错。这时,你就需要先进行类型转换。
📝 动手练一练
- 类型识别与转换:请计算表达式
3.5 + 3.5的结果,并说出结果的数据类型。然后,尝试使用int()函数将该结果转换为整数,观察转换后的值是多少。 - 布尔值转换:请问
bool(-100)、bool(0.0)和bool(0)这三个表达式的值分别是什么?先思考,再写代码验证。
👉 点击查看参考答案
1. 类型识别与转换
result = 3.5 + 3.5
print("结果1的类型:{},值:{}".format(type(result), result))
result_int = int(result)
print("结果2的类型:{},值:{}".format(type(result_int), result_int))
print("答案是:{}".format(result_int))结果1的类型:<class 'float'>,值:7.0
结果2的类型:<class 'int'>,值:7
答案是:7思路:两个浮点数相加,结果仍是浮点数 7.0。使用 int() 转换浮点数时会直接舍弃小数部分,得到整数 7。
2. 布尔值转换
print("bool(-100) 的值是:{}".format(bool(-100)))
print("bool(0.0) 的值是:{}".format(bool(0.0)))
print("bool(0) 的值是:{}".format(bool(0)))bool(-100) 的值是:True
bool(0.0) 的值是:False
bool(0) 的值是:False思路:bool() 转换数值时,0 和 0.0 为 False,非零数值(包括负数)为 True。
常见错误
| 错误写法 | 现象或报错 | 原因 | 正确写法 |
|---|---|---|---|
print(1 + "2") | TypeError: unsupported operand type(s) for +: 'int' and 'str' | 试图对整数和字符串使用 + 运算符,但它们的类型不匹配,+ 无法同时处理这两种类型。 | print(1 + int("2")) 或 print(str(1) + "2") |
result = 5 / 2print(int(result)) 期望得到 2 | 输出 2,但可能误以为 / 是整除。 | Python 3 中 / 是真除法,结果总是浮点数 (2.5)。int(2.5) 得到 2。若要整除,应直接使用 //。 | result = 5 // 2print(result) 直接得到整数 2 |
int("3.5") | ValueError: invalid literal for int() with base 10: '3.5' | int() 只能把“看起来像整数”的字符串转成整数,带小数点的字符串必须先转 float。 | int(float("3.5")) |
小结
- Python 是强类型语言,变量类型由赋值时右侧的值决定。
- 整型 (
int) 表示整数,浮点型 (float) 表示带小数点的实数。1和1.0在类型上是不同的。 - 布尔型 (
bool) 只有True和False两个值,用于逻辑判断。 - 使用
int()、float()、str()、bool()等函数可以进行类型转换。 - 运算符(如
+)的行为取决于操作数的类型,对数字是数学运算,对字符串是拼接。
📋 行动清单
- 在 Python 交互环境中,分别用
type()函数查看100、100.0、100.、True、False的类型。 - 编写一段代码,将一个浮点数
9.99先转换为整数,再转换回浮点数,观察数值的变化。 - 尝试写出一个会导致
TypeError的表达式(例如数字和字符串相加),然后修改代码使其能正确运行。
—— 小象教研组