Python 教程 03:数据类型基础
“万物皆有类。”
在 Python 的世界里,所有数据都有自己的类型。了解数据类型,就像认识食材,知道哪些能一起烹饪,哪些会"水火不容"。
1. Python 的基础数据类型
Python 有几种基础数据类型,今天我们先学习最常用的四种:
| 类型 | 英文名 | 示例 | 说明 |
|---|---|---|---|
| 整数 | int | 42, -100, 0 | 没有小数点的数字 |
| 浮点数 | float | 3.14, -0.5, 2.0 | 带小数点的数字 |
| 字符串 | str | "Hello", 'Python' | 文本数据 |
| 布尔值 | bool | True, 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,是所有编程语言的共同问题。就像你无法用分数精确表示圆周率 π。
解决方法:
- 使用
round()函数四舍五入 - 使用
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)
布尔值只有两个:True和False(注意首字母大写)。
# 布尔值
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等于 1False等于 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()
这些数据类型是编程的基石,就像汉字的"横竖撇捺",看似简单,组合起来却能写出千变万化的程序。
练习题:
- 计算
9 / 2、9 // 2、9 % 2的结果,理解它们的区别 - 尝试
print(0.1 + 0.2),看看浮点数精度问题 - 写一个程序,输入圆的半径,计算并输出圆的面积(π 取 3.14)
思考题:
为什么bool(0)是 False,而bool(-1)是 True?Python 判断 True/False 的规则是什么?
本文代码示例: