查看全课大纲(第 8 / 51 节)
  1. 1.Python 是什么?为什么值得学?
  2. 2.如何为 Python 编程准备一个“全家桶”环境?
  3. 3.Python 有哪几种执行方法?
  4. 4.行与缩进到底有什么用?
  5. 5.注释有什么用,怎么写?
  6. 6.变量:如何给数据起个好名字?
  7. 7.运算符的优先级和常见坑点是什么?
  8. 8.Python 中,数字和布尔值究竟有哪几种?
  9. 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
  10. 10.如何将程序的结果展示给用户或保存下来?
  11. 11.CSV 文件怎么读怎么写才方便?
  12. 12.列表是什么,如何创建和访问它?
  13. 13.列表的修改操作,有哪些方法?
  14. 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
  15. 15.判断语句:如何让程序根据条件做不同的事?
  16. 16.for 循环如何遍历序列中的元素?
  17. 17.while 循环什么时候才会停?
  18. 18.while 循环的结束条件,你写对了吗?
  19. 19.循环中途想提前结束,怎么办?
  20. 20.`break` 和 `continue` 到底有什么区别?
  21. 21.列表推导式如何让代码更简洁高效?
  22. 22.字符串怎么定义、拼接和操作?
  23. 23.元组:为什么定义单个元素时要加逗号?
  24. 24.集合(set)怎么用?如何快速去重和做集合运算?
  25. 25.字典是什么,为什么比列表更方便?
  26. 26.字典的增删改查与遍历,如何避免 KeyError?
  27. 27.函数里的变量,为什么有的能用有的不能用?
  28. 28.在函数内部修改全局变量,为什么有时不生效?
  29. 29.函数里能修改全局变量吗?返回值怎么用?
  30. 30.匿名函数:如何用 lambda 快速定义简单函数?
  31. 31.面向对象编程是什么,为什么需要它?
  32. 32.类中的方法和属性到底怎么定义和使用?
  33. 33.如何控制对对象内部属性和方法的访问?
  34. 34.异常发生时,程序会怎样继续执行?
  35. 35.如何组织代码:包和模块
  36. 36.`if __name__ == '__main__'` 到底有什么用?
  37. 37.如何用 IDE 的 Debug 功能排查程序错误?
  38. 38.Matplotlib 绘图的第一步该做什么?
  39. 39.Figure 是什么,如何设置图形尺寸?
  40. 40.如何自定义 Matplotlib 的坐标轴?
  41. 41.如何为图表添加图例,让不同曲线一目了然?
  42. 42.饼图怎么画才能直观展示数据占比?
  43. 43.如何用 Matplotlib 绘制散点图?
  44. 44.柱状图怎么画?
  45. 45.如何使用 Matplotlib 绘制等高线图?
  46. 46.如何在 Matplotlib 中绘制子图?
  47. 47.zip 函数如何把多个列表“打包”在一起?
  48. 48.如何给可迭代对象加上索引?
  49. 49.random 模块如何生成随机数?
  50. 50.math 模块怎么用?
  51. 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 会报错。这时,你就需要先进行类型转换。

📝 动手练一练

  1. 类型识别与转换:请计算表达式 3.5 + 3.5 的结果,并说出结果的数据类型。然后,尝试使用 int() 函数将该结果转换为整数,观察转换后的值是多少。
  2. 布尔值转换:请问 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 / 2
print(int(result)) 期望得到 2
输出 2,但可能误以为 / 是整除。Python 3 中 / 是真除法,结果总是浮点数 (2.5)。int(2.5) 得到 2。若要整除,应直接使用 //。result = 5 // 2
print(result) 直接得到整数 2
int("3.5")ValueError: invalid literal for int() with base 10: '3.5'int() 只能把“看起来像整数”的字符串转成整数,带小数点的字符串必须先转 float。int(float("3.5"))

小结

  1. Python 是强类型语言,变量类型由赋值时右侧的值决定。
  2. 整型 (int) 表示整数,浮点型 (float) 表示带小数点的实数。1 和 1.0 在类型上是不同的。
  3. 布尔型 (bool) 只有 True 和 False 两个值,用于逻辑判断。
  4. 使用 int()、float()、str()、bool() 等函数可以进行类型转换。
  5. 运算符(如 +)的行为取决于操作数的类型,对数字是数学运算,对字符串是拼接。

📋 行动清单

  • 在 Python 交互环境中,分别用 type() 函数查看 100、100.0、100.、True、False 的类型。
  • 编写一段代码,将一个浮点数 9.99 先转换为整数,再转换回浮点数,观察数值的变化。
  • 尝试写出一个会导致 TypeError 的表达式(例如数字和字符串相加),然后修改代码使其能正确运行。

—— 小象教研组