Python 教程 03:数据类型基础

“万物皆有类。”

在 Python 的世界里,所有数据都有自己的类型。了解数据类型,就像认识食材,知道哪些能一起烹饪,哪些会"水火不容"。

1. Python 的基础数据类型

Python 有几种基础数据类型,今天我们先学习最常用的四种:

类型英文名示例说明
整数int42, -100, 0没有小数点的数字
浮点数float3.14, -0.5, 2.0带小数点的数字
字符串str"Hello", 'Python'文本数据
布尔值boolTrue, False真或假

还有一个特殊的值:None,表示"空"或"无值"。

2. 整数(int)

整数就是没有小数部分的数字,可正可负可为零。

 1# 整数示例
 2age = 25
 3temperature = -10
 4zero = 0
 5
 6print(age, type(age))  # 25 <class 'int'>
 7print(temperature)     # -10
 8
 9# Python 3的整数可以无限大(只要内存够)
10big_number = 1234567890123456789012345678901234567890
11print(big_number)  # 正常输出,不会溢出
12
13# 不同进制的整数
14binary = 0b1010      # 二进制,等于十进制的10
15octal = 0o12         # 八进制,等于十进制的10
16hexadecimal = 0x1F   # 十六进制,等于十进制的31
17print(binary, octal, hexadecimal)  # 10 10 31

整数运算

 1a = 10
 2b = 3
 3
 4# 基本运算
 5print(a + b)   # 13 加法
 6print(a - b)   # 7  减法
 7print(a * b)   # 30 乘法
 8
 9# 除法:注意Python 3的除法很特别
10print(a / b)   # 3.3333... 除法,结果是浮点数
11print(a // b)  # 3  整除,结果是整数
12print(a % b)   # 1  取模(求余数)
13
14# 乘方
15print(a ** 2)  # 100 (10的2次方)
16print(2 ** 10) # 1024

这里有个有趣的现象:在 Python 3 中,10 / 3的结果是3.333...(浮点数),而不是像 Go/Java 那样得到3。如果你想要整除,必须用//

这就像分蛋糕:/是精确分配(可能有碎屑),//是整块分配(忽略碎屑)。

3. 浮点数(float)

浮点数就是带小数点的数字,用于表示实数。

 1# 浮点数示例
 2pi = 3.14
 3temperature = -2.5
 4scientific = 1.5e2  # 科学计数法,等于150.0
 5
 6print(pi, type(pi))       # 3.14 <class 'float'>
 7print(scientific)          # 150.0
 8
 9# 浮点数运算
10a = 10.5
11b = 2.5
12print(a + b)  # 13.0
13print(a / b)  # 4.2

浮点数的"坑"

浮点数有个经典的精度问题:

1# 浮点数精度问题
2print(0.1 + 0.2)  # 你以为是0.3?实际输出:0.30000000000000004
3print(0.1 + 0.2 == 0.3)  # False
4
5# 为什么?因为计算机用二进制存储,某些十进制小数无法精确表示

这不是 Python 的 bug,是所有编程语言的共同问题。就像你无法用分数精确表示圆周率 π。

解决方法:

  1. 使用round()函数四舍五入
  2. 使用decimal模块进行精确计算(金融计算时必须)
1# 解决方案
2result = 0.1 + 0.2
3print(round(result, 1))  # 0.3
4
5# 或者用decimal模块
6from decimal import Decimal
7a = Decimal('0.1')
8b = Decimal('0.2')
9print(a + b)  # 0.3

4. 字符串(str)

字符串是用引号括起来的文本,可以用单引号或双引号:

1# 字符串定义
2name = "张三"
3city = '北京'
4quote = "He said, 'Hello!'"  # 单引号里可以有双引号
5another = 'She said, "Hi!"'  # 双引号里可以有单引号
6
7print(name, type(name))  # 张三 <class 'str'>

字符串拼接

1# 用 + 拼接
2first_name = "张"
3last_name = "三"
4full_name = first_name + last_name
5print(full_name)  # 张三
6
7# 重复字符串
8print("哈" * 3)  # 哈哈哈
9print("-" * 10)  # ----------

字符串很特殊

字符串虽然看起来简单,但功能强大。我们会在后面专门用一课来深入学习。现在只需要知道:

 1# 字符串可以索引
 2text = "Python"
 3print(text[0])  # P(第一个字符)
 4print(text[-1])  # n(最后一个字符)
 5
 6# 字符串可以切片
 7print(text[0:3])  # Pyt
 8
 9# 字符串有很多方法
10print(text.upper())  # PYTHON
11print(text.lower())  # python
12print(len(text))     # 6(长度)

5. 布尔值(bool)

布尔值只有两个:TrueFalse(注意首字母大写)。

 1# 布尔值
 2is_sunny = True
 3is_raining = False
 4
 5print(is_sunny, type(is_sunny))  # True <class 'bool'>
 6
 7# 布尔值通常来自比较运算
 8print(5 > 3)   # True
 9print(2 == 3)  # False
10print(10 >= 10)  # True

布尔值的"真身"

在 Python 中,布尔值其实是整数的子类:

  • True等于 1
  • False等于 0
1# 布尔值参与运算
2print(True + True)   # 2
3print(True + False)  # 1
4print(False * 100)   # 0
5
6# 这很神奇,但别滥用,会让代码难懂

6. None:空值

None是 Python 的特殊值,表示"无"、“空”、“什么都没有”:

 1# None值
 2result = None
 3print(result, type(result))  # None <class 'NoneType'>
 4
 5# None常用于初始化变量
 6data = None  # 先占个位,后面再赋值
 7
 8# None在条件判断中等于False
 9if None:
10    print("不会执行")
11else:
12    print("会执行")  # 输出这个

7. 类型转换:让数据"变身"

有时候需要在不同类型之间转换,比如把字符串转成数字:

转换函数

 1# 转整数
 2print(int("123"))      # 123
 3print(int(3.14))       # 3(会截断小数部分)
 4print(int(True))       # 1
 5# print(int("abc"))    # ValueError: 无法转换
 6
 7# 转浮点数
 8print(float("3.14"))   # 3.14
 9print(float(5))        # 5.0
10print(float(True))     # 1.0
11
12# 转字符串
13print(str(123))        # "123"
14print(str(3.14))       # "3.14"
15print(str(True))       # "True"
16
17# 转布尔值
18print(bool(1))         # True
19print(bool(0))         # False
20print(bool(""))        # False(空字符串)
21print(bool("abc"))     # True(非空字符串)
22print(bool(None))      # False

什么时候需要转换?

最常见的场景是处理用户输入:

1# input()返回的总是字符串
2# age = input("请输入年龄:")  # 假设用户输入25
3# print(age + 10)  # TypeError: 字符串不能和数字相加
4
5# 正确做法:转换类型
6age = int(input("请输入年龄:"))
7print(age + 10)  # 35

8. 类型检查

使用type()函数查看类型,使用isinstance()判断类型:

1# 查看类型
2x = 100
3print(type(x))  # <class 'int'>
4print(type(x) == int)  # True
5
6# 判断类型(更pythonic的方式)
7print(isinstance(x, int))     # True
8print(isinstance(x, float))   # False
9print(isinstance(x, (int, float)))  # True(是int或float)

9. 小结

今天我们学习了 Python 的基础数据类型:

  • int:整数,可以无限大,支持多种进制
  • float:浮点数,有精度问题,小心使用
  • str:字符串,文本数据,功能强大
  • bool:布尔值,只有 True 和 False
  • None:空值,表示"无"
  • 类型转换:int(), float(), str(), bool()

这些数据类型是编程的基石,就像汉字的"横竖撇捺",看似简单,组合起来却能写出千变万化的程序。


练习题

  1. 计算9 / 29 // 29 % 2的结果,理解它们的区别
  2. 尝试print(0.1 + 0.2),看看浮点数精度问题
  3. 写一个程序,输入圆的半径,计算并输出圆的面积(π 取 3.14)

思考题

为什么bool(0)是 False,而bool(-1)是 True?Python 判断 True/False 的规则是什么?


本文代码示例


相关阅读