第 2 章 · 变量、数据类型与运算符
本章目标:理解 Python 变量与动态类型;掌握 int、float、str、bool 及 None;熟练使用算术、比较、逻辑与赋值运算符;会用 type()、isinstance() 与 input() 做简单交互;能编写示例书店 shop-demo 的价格计算小脚本。
学时建议:3~4 小时(含 1 小时跟练)
前置:完成 ch01,能运行 hello.py 并使用 REPL。
2.1 变量与命名
变量是绑定到对象上的名字,无需提前声明类型。
book_title = "Python 入门"
price = 59.9
in_stock = True
| 规则 | 说明 | 示例 |
|---|
| 合法字符 | 字母、数字、下划线 | user_name |
| 不能以数字开头 | 语法错误 | 2price ✗ |
| 区分大小写 | Price ≠ price | — |
| 风格 | 变量用 snake_case | total_amount |
| 常量约定 | 全大写(约定,非强制) | MAX_RETRY = 3 |
# 多重赋值
a, b, c = 1, 2, 3
x = y = 0
说明:本课程示例均使用虚构场景(如 shop-demo、user-demo),不引用任何企业内部仓库或配置。
2.2 基本数据类型
| 类型 | 说明 | 示例 |
|---|
int | 整数,任意精度 | 42, -7, 0 |
float | 浮点数 | 3.14, 1.0 |
str | 字符串 | "hello", '书店' |
bool | 布尔 | True, False |
NoneType | 空值 | None |
quantity = 3
unit_price = 19.9
subtotal = quantity * unit_price # 59.7,float
name = "shop-demo"
print(type(name)) # <class 'str'>
print(isinstance(subtotal, float)) # True
2.2.1 类型转换
s = "128"
n = int(s) # 128
f = float("3.5") # 3.5
text = str(100) # "100"
flag = bool(0) # False;非零数为 True
| 转换 | 注意 |
|---|
int("3.14") | 报错,需先 float 再 int |
int(3.9) | 截断为 3,非四舍五入 |
bool("") | 空字符串为 False |
2.3 字符串
shop = "示例书店"
greeting = '欢迎光临'
msg = f"{shop}:{greeting},今日特价 {9.9:.1f} 元"
# 常用方法
title = " Python 基础 "
title.strip() # "Python 基础"
"hello".upper() # "HELLO"
"a,b,c".split(",") # ['a', 'b', 'c']
"-".join(["2026", "08", "19"]) # "2026-08-19"
| 写法 | 说明 |
|---|
f"{x}" | f-string,推荐(3.6+) |
"{}".format(x) | 旧式,仍常见 |
+ 拼接 | 少量拼接可用;循环中优先 join |
# 原始字符串(路径、正则)
path = r"C:\data\books.csv"
2.4 算术运算符
| 运算符 | 含义 | 示例 |
|---|
+ - * | 加减乘 | 3 * 4 → 12 |
/ | 真除法,结果为 float | 7 / 2 → 3.5 |
// | 整除 | 7 // 2 → 3 |
% | 取余 | 7 % 2 → 1 |
** | 幂 | 2 ** 3 → 8 |
# shop-demo:两件九折
price = 50
qty = 2
discount = 0.9 if qty >= 2 else 1.0
total = price * qty * discount
print(f"应付:{total:.2f} 元")
浮点精度
0.1 + 0.2 # 0.30000000000000004
round(0.1 + 0.2, 2) # 0.3
from decimal import Decimal
Decimal("0.1") + Decimal("0.2") # Decimal('0.3'),金额场景可选
2.5 比较与逻辑运算符
比较
| 运算符 | 含义 |
|---|
== != | 相等、不等 |
< > <= >= | 大小比较 |
is | 同一对象(少用,多用于 None) |
stock = 10
can_buy = stock > 0 and price > 0
is_free = price == 0