从输出、变量到字符串格式化与条件判断
复习建议: 先理解概念,再亲手敲一遍示例;遇到报错时重点检查大小写、括号、引号和缩进。
1. print():输出内容
print() 是 Python 的内置函数,用于把文字、变量或计算结果输出到控制台。
1 | print("Hello World") |
- 字符串乘以整数,表示把字符串重复指定次数。
- Python 代码应使用英文半角括号 (),不要使用中文全角括号 ()。
2. 注释
以 # 开头的内容是注释,Python 不会执行它。注释用于解释代码、记录思路或临时停用一行代码。
1 | # 这是单行注释 |
3. 布尔值:True 与 False
布尔类型 bool 只有 True 和 False 两个值。在数学运算中,True 相当于 1,False 相当于 0。
1 | print(True + 1) # 2 |
注意: True 和 False 的首字母必须大写。
4. 变量与赋值
变量是用于保存数据的名称,可以把它理解为一个贴了标签的容器。等号 = 表示“把右边的值赋给左边的变量”。
1 | num = 200700 |
1 | a = 20 |
5. 标识符(变量名)规则
- 可以包含英文字母、数字和下划线。
- 不能以数字开头。
- 不能使用 if、while、for 等 Python 关键字。
- 区分大小写:name 和 Name 是两个不同变量。
- 建议使用有意义的名称;多个单词通常用下划线连接。
1 | user_name = "黄圣坤" # 正确 |
6. 运算符
运算符是用来进行计算、比较或逻辑判断的符号。常见的运算符包括算术运算符、赋值运算符、比较运算符和逻辑运算符。
6.1 算术运算符
算术运算符用于数字计算:
- +:加法;-:减法;*:乘法;/:除法,结果通常是浮点数。
- //:整除,只保留商的整数部分;%:取余数;**:幂运算。
1 | print(10 + 3) # 13 |
6.2 赋值运算符
赋值运算符用于给变量保存数据。最基本的赋值运算符是 =,还可以把运算和赋值合并:
1 | num = 10 |
- 常见组合赋值:+=、-=、*=、/=、//=、%=、**=。
6.3 比较运算符
比较运算符用于比较两个值,结果一定是布尔值 True 或 False。
1 | a = 10 |
易错点: = 是赋值;== 才是比较两个值是否相等。
6.4 逻辑运算符
逻辑运算符用于组合多个条件:
- and:并且,所有条件都为 True,结果才为 True。
- or:或者,只要有一个条件为 True,结果就是 True。
- not:取反,True 变 False,False 变 True。
1 | age = 21 |
记忆: 比较运算符通常先得到 True/False,再用 and、or、not 组合条件。
7. if 条件判断
if 表示“如果”。程序会先判断条件:条件为 True 时,执行缩进的代码;条件为 False 时,跳过这段代码。
1 | if 条件: |
- 条件后面必须有英文冒号 :。
- 下一行必须缩进,通常使用 4 个空格。Python 通过缩进判断代码的归属。
1 | score = int(input("请输入你的高考分数:")) |
如果输入 700,条件 score > 680 为 True,会执行输出;如果输入 680 或更低,条件为 False,程序会跳过输出。
7.1 if、else 与 elif
else 表示“否则”,当 if 条件不成立时执行;elif 表示“否则如果”,用于判断多个条件。
1 | score = int(input("请输入分数:")) |
程序会从上到下判断,执行第一个成立的分支,后面的分支不会继续执行。
if…elif…else 流程树
开始
└─ 条件 1?
├─ True → 执行操作 1 → 结束
└─ False → 条件 2?
├─ True → 执行操作 2 → 结束
└─ False → 执行操作 3 → 结束
流程从“开始”进入条件 1:条件 1 为 True 时执行操作 1;条件 1 为 False 时继续判断条件 2。条件 2 为 True 时执行操作 2,否则执行操作 3。
1 | if 条件1: |
理解重点: elif 只有在前面的 if 条件为 False 时才会被判断;else 不写条件,用来处理前面所有条件都不成立的情况。
7.2 在 if 中使用比较和逻辑运算符
1 | age = 20 |
比较运算符会得到 True 或 False,and、or、not 可以把多个条件组合起来。Python 还支持连续比较:10 <= num <= 20。
易错点: if score > 680: 与 if score >= 680: 不同;前者不包含 680,后者包含 680。
7.3 if…else 重点总结
if…else 让程序在两条路线中选择一条:if 条件为 True 时执行 if 分支;条件为 False 时执行 else 分支,两个分支只会执行其中一个。
1 | if 条件: |
账号和密码登录判断示例:
1 | user = input("请输入您的用户名:") |
这个程序会从上到下依次检查三组账号和密码;只要其中一组同时匹配,就输出登录成功。三组条件都不成立时,才会执行 else。
- if 和 else 后面都必须有英文冒号 :。
- 分支代码必须缩进,通常使用 4 个空格。
- else 后面不能再写条件;需要继续判断时使用 elif。
- 判断相等使用 ==,给变量赋值使用 =。
- else 必须与对应的 if 保持相同缩进。
安全提醒: 这个程序适合练习条件判断。实际项目不要把真实账号和密码直接写在代码中,也不要用明文方式保存密码。
记忆口诀: if:如果成立;elif:否则再判断;else:以上条件都不成立。
7.4 使用 if、elif、else 判断正数、负数和 0
当程序需要处理三个或更多互斥情况时,可以组合使用 if、elif 和 else:
- if:先判断第一个条件。
- elif:前面的条件不成立时,再判断新的条件。
- else:前面的所有条件都不成立时执行,不需要写条件。
- 程序会从上到下判断,只执行第一个成立的分支。
1 | num = int(input("请输入一个数字:")) |
判断过程:num > 0 时输出正数;否则继续判断 num < 0;如果两个条件都不成立,那么 num 只能是 0,因此由 else 处理。
易错点: num > 0 已经排除了 0,不需要再写 num > 0 and num != 0。若题目明确保证输入不为 0,也可以只使用 if…else 判断正数和负数。
7.5 条件判断的嵌套
条件判断的嵌套,是指在一个 if、elif 或 else 分支中继续编写另一组 if…elif…else。外层条件先决定是否进入该分支,进入后再判断内层条件。
1 | age = int(input("请输入你的年龄:")) |
执行过程:程序先使用外层 if 判断是否成年;只有 age >= 18 成立时,才会继续输入并判断成绩。内层 if…elif…else 用于区分优秀、及格和不及格;未成年时直接执行外层 else。
- 内层代码通常比外层多缩进 4 个空格。
- 内层的 elif 和 else 与内层 if 对齐。
- 外层的 else 与外层 if 对齐。
- 应避免嵌套层数过多,否则代码会难以阅读。
记忆: 先判断外层条件,再判断内层条件;缩进决定每个 else 属于哪一个 if。
8. match…case 模式匹配
match…case 用于把一个值与多个模式依次匹配。它适合菜单选项、星期、状态代码等“一个值对应多种结果”的场景,需要 Python 3.10 或更高版本。
基本结构:
1 | match 要匹配的数据: |
星期安排示例:
1 | day = input("请输入星期(1-7):") |
- match day:开始匹配变量 day 的值。
- case “1”:day 等于字符串 “1” 时执行对应代码。
- case “6” | “7”:竖线 | 表示匹配 “6” 或 “7”。
- case _:通配分支,作用类似 if…elif…else 中最后的 else。
- input() 返回字符串,因此 case 中的 1 到 7 要加引号。
- 程序只执行第一个匹配成功的 case,随后结束整个 match 结构。
易错点: case _ 通常放在最后;如果放在前面,它会先匹配所有情况,后面的 case 就没有机会执行。
8.1 match…case 简易计算器
下面的程序先接收两个数字和一个运算符,再通过 match…case 选择对应的加、减、乘、除运算:
1 | a = float(input("请输入一个数:")) |
- float(input(…)):把输入的数据转换为浮点数,因此可以计算整数和小数。
- match b:根据用户输入的运算符选择对应分支。
- 每个 case 负责一种运算,f-string 同时显示算式和计算结果。
- 除法分支中嵌套 if…else,用于防止除数 c 为 0 时发生 ZeroDivisionError。
- case _:当前面的四种运算符都不匹配时,提示运算符输入错误。
易错点: b 是 input() 得到的字符串,所以 +、-、*、/ 必须写在引号中。case _ 后面直接写冒号,推荐写成 case _:。
9. 常见数据类型与 type()
type() 用来查看一个数据或变量的类型。
1 | print(type("hello")) # str:字符串 |
易错点: 正确写法是 bool 和 NoneType;Python 区分大小写。
10. isinstance():判断类型
isinstance(数据, 类型) 用来判断数据是否属于指定类型,结果是 True 或 False。
1 | num = 100 |
11. 字符串
字符串可以用单引号、双引号或三引号表示。三引号适合保存多行内容。
1 | name = '黄圣坤' |
如果字符串内部含有单引号,可以使用反斜杠转义,也可以改用双引号包围字符串。
1 | sentence1 = 'It\'s very interesting' |
12. 常见转义字符
- \n:换行
- \t:制表符,产生缩进效果
- ':表示单引号
- ":表示双引号
- \:表示反斜杠
- \r:回到当前行开头
1 | print("\t从现在开始\n你必须叫我大哥") |
13. 字符串拼接
使用 + 拼接
加号可以连接字符串,但参与拼接的数据通常都要是字符串。
1 | msg1 = "人生苦短," |
相邻字符串自动连接
1 | s1 = "人生苦短," "我用 Python" |
14. % 占位符
%s 会预留一个位置,并把变量转换为字符串后放进去。多个变量需要写在元组中。
1 | name = "黄圣坤" |
- %s:字符串
- %d:整数
- %f:浮点数
15. 更推荐的 f-string
现代 Python 更推荐 f-string:在字符串前加 f,把变量或表达式写进大括号 {},阅读和修改都更方便。
1 | name = "黄圣坤" |
建议: 年龄属于数值,最好写成 age = 21,而不是 age = “21”。
16. 用户输入与类型转换
input() 用来获取用户输入。无论用户输入数字还是文字,input() 得到的结果默认都是字符串(str)。
1 | password = input("请输入您的银行卡密码:") |
如果要把输入的金额用于计算,需要先用 int() 或 float() 转换类型。
1 | total = 10000 |
常见类型转换函数:
- int():转换为整数,例如 int(“10”) 得到 10。
- float():转换为浮点数,例如 float(“0.5”) 得到 0.5。
- str():转换为字符串,例如 str(21) 得到 “21”。
- bool():转换为布尔值;空字符串、0、None 通常会得到 False,其他大多数值会得到 True。
1 | print(int("10")) |
安全提醒: 示例为了演示输出而打印了 password;实际程序不应直接显示或保存用户密码。
易错点: bool(“False”) 的结果是 True,因为非空字符串都被视为真;不要用它直接判断用户输入的文字。
15.1 输入转换与范围判断
input() 返回的是字符串。即使在 f-string 中写了 int(num),也只是把显示出来的那一部分临时转换,不会改变变量 num 本身。
1 | num = input("请输入一个整数:") |
推荐在接收输入时就完成转换,并把转换后的结果保存回变量:
1 | num = int(input("请输入一个整数:")) |
Python 支持连续比较,10 <= num <= 20 等价于 num >= 10 and num <= 20。
记忆: 转换表达式 int(num) 不会自动修改 num;想改变变量类型,需要写成 num = int(num)。
17. 浮点数精度问题
有时计算 0.5 - 0.4,结果会显示为 0.09999999999999998。这不是代码错误,而是计算机表示浮点数时的精度限制。
计算机使用二进制保存小数,而某些十进制小数(例如 0.4)无法被二进制精确表示,只能保存一个非常接近的近似值。相减后,这个微小误差就可能显示出来。
1 | x = 0.5 |
只需要正常显示时,可以用 round() 保留小数位,或使用格式化输出:
1 | print(round(x - y, 2)) # 0.1 |
如果是金额等需要精确计算的场景,可以使用 Decimal:
1 | from decimal import Decimal |
记忆: 浮点数适合一般科学计算;需要精确小数时,优先考虑 Decimal。
18. 综合练习
请先自己写一遍,再运行并观察结果:
1 | name = "黄圣坤" |
复习检查清单
- 我能用 print() 输出文字、变量和计算结果。
- 我知道 = 是赋值,而不是数学中的等号。
- 我会使用 if、elif 和 else 编写多分支判断。
- 我能看懂并编写嵌套的条件判断。
- 我会使用 match…case 处理多个固定选项。
- 我能说出 str、int、float、bool 和 NoneType。
- 我会使用 type() 和 isinstance()。
- 我理解常见转义字符。
- 我会用 +、% 占位符和 f-string 组织字符串。