Python 教程 03:数据类型基础

“万物皆有类。”

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

1. Python 的基础数据类型

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

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

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

2. 整数(int)

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

# 整数示例
age = 25
temperature = -10
zero = 0

print(age, type(age))  # 25 <class 'int'>
print(temperature)     # -10

# Python 3的整数可以无限大(只要内存够)
big_number = 1234567890123456789012345678901234567890
print(big_number)  # 正常输出,不会溢出

# 不同进制的整数
binary = 0b1010      # 二进制,等于十进制的10
octal = 0o12         # 八进制,等于十进制的10
hexadecimal = 0x1F   # 十六进制,等于十进制的31
print(binary, octal, hexadecimal)  # 10 10 31

整数运算

a = 10
b = 3

# 基本运算
print(a + b)   # 13 加法
print(a - b)   # 7  减法
print(a * b)   # 30 乘法

# 除法:注意Python 3的除法很特别
print(a / b)   # 3.3333... 除法,结果是浮点数
print(a // b)  # 3  整除,结果是整数
print(a % b)   # 1  取模(求余数)

# 乘方
print(a ** 2)  # 100 (10的2次方)
print(2 ** 10) # 1024

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

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

3. 浮点数(float)

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

# 浮点数示例
pi = 3.14
temperature = -2.5
scientific = 1.5e2  # 科学计数法,等于150.0

print(pi, type(pi))       # 3.14 <class 'float'>
print(scientific)          # 150.0

# 浮点数运算
a = 10.5
b = 2.5
print(a + b)  # 13.0
print(a / b)  # 4.2

浮点数的"坑"

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

# 浮点数精度问题
print(0.1 + 0.2)  # 你以为是0.3?实际输出:0.30000000000000004
print(0.1 + 0.2 == 0.3)  # False

# 为什么?因为计算机用二进制存储,某些十进制小数无法精确表示

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

解决方法:

  1. 使用round()函数四舍五入
  2. 使用decimal模块进行精确计算(金融计算时必须)
# 解决方案
result = 0.1 + 0.2
print(round(result, 1))  # 0.3

# 或者用decimal模块
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b)  # 0.3

4. 字符串(str)

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

# 字符串定义
name = "张三"
city = '北京'
quote = "He said, 'Hello!'"  # 单引号里可以有双引号
another = 'She said, "Hi!"'  # 双引号里可以有单引号

print(name, type(name))  # 张三 <class 'str'>

字符串拼接

# 用 + 拼接
first_name = "张"
last_name = "三"
full_name = first_name + last_name
print(full_name)  # 张三

# 重复字符串
print("哈" * 3)  # 哈哈哈
print("-" * 10)  # ----------

字符串很特殊

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

# 字符串可以索引
text = "Python"
print(text[0])  # P(第一个字符)
print(text[-1])  # n(最后一个字符)

# 字符串可以切片
print(text[0:3])  # Pyt

# 字符串有很多方法
print(text.upper())  # PYTHON
print(text.lower())  # python
print(len(text))     # 6(长度)

5. 布尔值(bool)

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

# 布尔值
is_sunny = True
is_raining = False

print(is_sunny, type(is_sunny))  # True <class 'bool'>

# 布尔值通常来自比较运算
print(5 > 3)   # True
print(2 == 3)  # False
print(10 >= 10)  # True

布尔值的"真身"

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

  • True等于 1
  • False等于 0
# 布尔值参与运算
print(True + True)   # 2
print(True + False)  # 1
print(False * 100)   # 0

# 这很神奇,但别滥用,会让代码难懂

6. None:空值

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

# None值
result = None
print(result, type(result))  # None <class 'NoneType'>

# None常用于初始化变量
data = None  # 先占个位,后面再赋值

# None在条件判断中等于False
if None:
    print("不会执行")
else:
    print("会执行")  # 输出这个

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

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

转换函数

# 转整数
print(int("123"))      # 123
print(int(3.14))       # 3(会截断小数部分)
print(int(True))       # 1
# print(int("abc"))    # ValueError: 无法转换

# 转浮点数
print(float("3.14"))   # 3.14
print(float(5))        # 5.0
print(float(True))     # 1.0

# 转字符串
print(str(123))        # "123"
print(str(3.14))       # "3.14"
print(str(True))       # "True"

# 转布尔值
print(bool(1))         # True
print(bool(0))         # False
print(bool(""))        # False(空字符串)
print(bool("abc"))     # True(非空字符串)
print(bool(None))      # False

什么时候需要转换?

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

# input()返回的总是字符串
# age = input("请输入年龄:")  # 假设用户输入25
# print(age + 10)  # TypeError: 字符串不能和数字相加

# 正确做法:转换类型
age = int(input("请输入年龄:"))
print(age + 10)  # 35

8. 类型检查

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

# 查看类型
x = 100
print(type(x))  # <class 'int'>
print(type(x) == int)  # True

# 判断类型(更pythonic的方式)
print(isinstance(x, int))     # True
print(isinstance(x, float))   # False
print(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 的规则是什么?


本文代码示例


相关阅读