文章目录
-
-
- 一、变量与常量:给数据安个"家"
-
- [1.1 变量:不是盒子,是标签](#1.1 变量:不是盒子,是标签)
- [1.2 常量:约定俗成的不可变](#1.2 常量:约定俗成的不可变)
- 二、基本数据类型:数据的DNA
-
- [2.1 数值类型:精度的艺术](#2.1 数值类型:精度的艺术)
- [2.2 字符串类型:不可变的字符序列](#2.2 字符串类型:不可变的字符序列)
- [2.3 布尔类型:逻辑的真与假](#2.3 布尔类型:逻辑的真与假)
- 三、数据类型转换:打通任督二脉
- 四、运算符:让数据动起来
-
- [4.1 算术运算符](#4.1 算术运算符)
- [4.2 赋值运算符](#4.2 赋值运算符)
- [4.3 比较运算符](#4.3 比较运算符)
- [4.4 逻辑运算符](#4.4 逻辑运算符)
- [4.5 位运算符](#4.5 位运算符)
- [4.6 运算符优先级(从高到低)](#4.6 运算符优先级(从高到低))
- 五、本章实战与坑点总结
-
前言
在《第2章 Python编程基础》中,我们搭建了IPO模型,认识了print和input。但真正存储数据、处理数据的主角,是变量 和数据类型。它们就像盖房子用的砖块和水泥,决定了代码的稳固与功能。今天,我们就彻底吃透《第3章 数据类型和运算符》!
一、变量与常量:给数据安个"家"
1.1 变量:不是盒子,是标签
在Python中,a = 10 这行代码,我们常说"把10赋值给变量a"。但更准确的理解是:在内存中创建了一个值为10的整数对象,然后把标签'a'贴在这个对象上。
python
a = 10
print(a, type(a)) # 输出: 10 <class 'int'>
print(id(a)) # 输出对象的内存地址,例如: 140723456789
a = 'Python' # 标签'a'被撕下来,贴到了一个新的字符串对象上
print(a, type(a)) # 输出: Python <class 'str'>

重点: Python是动态类型语言 ,同一个变量名a可以先后指向不同类型的对象。
1.2 常量:约定俗成的不可变
Python没有语法上的常量(如C语言的const),但我们用全大写字母和下划线来表示一个"不应被修改"的变量,作为一种约定。
python
PI = 3.1415926 # 圆周率,视为常量
# PI = 3.14 # 可以修改,但强烈不建议
二、基本数据类型:数据的DNA
Python有三大基本数据类型:数值、字符串、布尔。
2.1 数值类型:精度的艺术
-
整数 :理论范围无限。支持二进制(
0b)、八进制(0o)、十六进制(0x)。 -
浮点数 :带小数点的数。注意!浮点数计算存在精度误差 。
pythonprint(0.1 + 0.2) # 输出: 0.30000000000000004 ❌ 并不是预期的0.3 print(round(0.1 + 0.2, 1)) # 输出: 0.3 ✅ 用round函数解决

- 复数 :
x = 123 + 456j,科学计算中常用。
2.2 字符串类型:不可变的字符序列
-
定义 :用单引号
'、双引号"或三引号'''括起来。 -
索引与切片 :
pythons = "HELLOWORLD" print(s[0]) # 正向索引:H print(s[-1]) # 反向索引:D print(s[2:7]) # 切片:LLOWO (从索引2到6,不包括7) print(s[::2]) # 步长为2的切片:HLOOL

- 转义字符 :
\n换行,\t制表符,\\反斜杠本身。若字符串前加r或R,则转义字符失效。
2.3 布尔类型:逻辑的真与假
-
只有
True和False两个值。 -
布尔值与数字 :
True是1,False是0。pythonprint(True + 10) # 输出: 11 print(False + 10) # 输出: 10

- 对象的布尔值 :任何对象都可以被测试布尔值。为
False的情况:False或None- 数字
0,0.0,0j - 空序列:
'',(),[],{},set()
三、数据类型转换:打通任督二脉
| 函数 | 作用 | 示例与注意 |
|---|---|---|
int(x) |
转为整数 | int('3.14')会报错!int('3')可以。浮点转整数截断小数部分。 |
float(x) |
转为浮点数 | float('3') -> 3.0 |
str(x) |
转为字符串 | str(3.14) -> '3.14' |
chr(x) |
整数转字符 | chr(65) -> 'A' |
ord(x) |
字符转整数 | ord('A') -> 65 |
eval(s) |
执行字符串中的有效Python表达式 | eval('10+20') -> 30。慎用,存在安全风险。 |
四、运算符:让数据动起来
4.1 算术运算符
+ - * / (结果为浮点) // (整除) % (取余) ** (幂运算)
4.2 赋值运算符
= += -= *= /= //= %= **=
python
a = 10
a += 5 # 等价于 a = a + 5
print(a) # 输出: 15

4.3 比较运算符
> < == (等于) != (不等于) >= <=
4.4 逻辑运算符
and (与) or (或) not (非)
短路求值 :8>7 and 10/0 不会报错,因为8>7为True,但and需要两边都为True,所以计算到10/0,报错!改为8<7 and 10/0则不会计算10/0。
4.5 位运算符
& (与) | (或) ^ (异或) ~ (取反) << (左移) >> (右移)(了解即可)
4.6 运算符优先级(从高到低)
算术运算符 > 位运算符 > 比较运算符 > 逻辑运算符 > 赋值运算符
- 第一级 :
**(幂运算) - 第二级 :
~+x-x(正负号、位取反) - 第三级 :
*/%// - ... (省略中间) ...
- 最后级 :
=赋值运算符
建议:永远使用**括号`**来明确你的运算顺序,提高代码可读性!
五、本章实战与坑点总结
实战一:从键盘获取一个4位整数,分别输出个位、十位、百位、千位上的数字。
python
num = eval(input("请输入一个四位整数: "))
print(f"个位: {num % 10}")
print(f"十位: {num // 10 % 10}")
print(f"百位: {num // 100 % 10}")
print(f"千位: {num // 1000}")

常见坑点:
- 浮点数精度 :永远不要用
==直接比较两个浮点数是否相等。用abs(a-b) < 0.00001这种方式。 - input()类型 :
input()永远返回字符串。进行数值运算前,必须用int()或eval()转换。eval()更强大,但如果输入了恶意代码有风险,推荐用int()等明确类型函数。 - 变量命名 :不要用Python的保留字(
False,True,and等)做变量名。 - 链式赋值与解包 :
a = b = 10是链式赋值。a, b = 10, 20是序列解包赋值,可以很方便地交换变量:a, b = b, a。