小白学 Python
AI 编程指南
© 2026 小白学 Python · 基于 walter201230/Python 教程
课程目录关于本站联系方式隐私政策GitHub

全部课程

  1. 00为什么学 Python
  2. 01Python 安装与第一个程序
  3. 02基本数据类型与变量
  4. 03List 与 Tuple
  5. 04Dict 与 Set
  6. 05条件与循环
  7. 06函数
  8. 07迭代
  9. 08面向对象
  10. 09模块
  11. 10魔法方法
  12. 11枚举类
  13. 12元类 metaclass
  14. 13线程与进程
  15. 14正则表达式
  16. 15闭包
  17. 16装饰器
  18. 17代码可读性
  19. 18pathlib:现代化路径处理
  20. 19异常处理
  21. 20dataclass
  22. 21上下文管理器(with)
  23. 22async / await
  24. 23pyproject.toml + uv
  25. 24ruff:一站式代码检查
  26. 25pytest:测试框架
  27. 26日志 logging
  28. 27打包发布到 PyPI
  29. 28学完之后
Python 环境加载中…

条件与循环

7 道练习题·预计 80 分钟·做对一题解锁下一段

完整通读本章 →

教学 01 / 04· 已读

前言

通常都听到别人说,计算机很牛逼,很聪明,其实计算机一点都不聪明,光是你要跟他沟通,都会气 shi 你,聪明的是在写程序的你。

写程序就是跟计算机沟通,告诉它要做什么。

竟然是这样,那么肯定缺少不了一些沟通逻辑。比如你要告诉计算机在什么情况下做什么?或者在哪个时间点做什么?

这都需要用到逻辑判断。这一章节,主要就是说这个。

目录

条件语句和循环语句

  • 一、条件语句
    • 1、什么是条件语句
    • 2、if 语句的基本形式
    • 3、if 语句多个判断条件的形式
    • 4、if 语句多个条件同时判断
    • 5、if 嵌套
  • 二、循环语句
    • 1、什么是循环语句
    • 2、for 循环语句
    • 3、range() 函数
    • 4、While 循环语句
    • 5、for 循环和 while 循环的区别
    • 6、嵌套循环
  • 三、条件语句和循环语句综合实例
    • 1、打印九九乘法表
    • 2、判断是否是闰年
教学 02 / 04

一、条件语句

1、什么是条件语句

Python 条件语句跟其他语言基本一致的,都是通过一条或多条语句的执行结果( True 或者 False )来决定执行的代码块。

Python 程序语言指定任何非 0 和非空(null)值为 True,0 或者 null 为 False。

执行的流程图如下:

if 条件判断

2、if 语句的基本形式

Python 中,if 语句的基本形式如下:

Python· 语法示意
if 判断条件:
    执行语句……
else:
    执行语句……

之前的章节也提到过,Python 语言有着严格的缩进要求,因此这里也需要注意缩进,也不要少写了冒号 : 。

if 语句的判断条件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系。

例如:

Python· 可在网页运行
# -*-coding:utf-8-*-

results=59

if results>=60:
    print ('及格')
else :
    print ('不及格')

输出的结果为:

文本
不及格

上面也说到,非零数值、非空字符串、非空 list 等,判断为 True,否则为 False。因此也可以这样写:

Python· 可在网页运行
num = 6
if num :
    print('Hello Python')

输出的结果如下:

文本
Hello Python

可见,把结果打印出来了。

那如果我们把 num 改为空字符串呢?

Python· 结合前文阅读
num = ''
if num :
    print('Hello Python')

输出结果什么也没有打印(程序正常结束,没输出 Hello Python)。

很明显,空字符串是为 False 的,不符合条件语句,因此不会执行到 print('Hello Python') 这段代码。

还有再啰嗦一点,提醒一下,在条件判断代码中的冒号 : 后、下一行内容是一定要缩进的。不缩进是会报错的。

Python· 预期报错示例
num = ''
if num :
print('Hello Python')

运行后会报错:

文本
  File "/Users/twowater/dev/python/test/com/twowater/test.py", line 4
    print('Hello Python')
        ^
IndentationError: expected an indented block

冒号和缩进是一种语法。它会帮助 Python 区分代码之间的层次,理解条件执行的逻辑及先后顺序。

3、if 语句多个判断条件的形式

有些时候,我们的判断语句不可能只有两个,有些时候需要多个,比如上面的例子中大于 60 的为及格,那我们还要判断大于 90 的为优秀,在 80 到 90 之间的良好呢?

这时候需要用到 if 语句多个判断条件,

用伪代码来表示:

Python· 语法示意
if 判断条件1:
    执行语句1……
elif 判断条件2:
    执行语句2……
elif 判断条件3:
    执行语句3……
else:
    执行语句4……

实例:

Python· 可在网页运行
# -*-coding:utf-8-*-

results = 89

if results > 90:
    print('优秀')
elif results > 80:
    print('良好')
elif results > 60:
    print ('及格')
else :
    print ('不及格')

输出的结果:

文本
良好

4、if 语句多个条件同时判断

有时候我们会遇到多个条件的时候该怎么操作呢?

比如说要求 java 和 python 的考试成绩要大于 80 分的时候才算优秀,这时候该怎么做?

这时候我们可以结合 or 和 and 来使用。

or (或)表示两个条件有一个成立时判断条件成功

and (与)表示只有两个条件同时成立的情况下,判断条件才成功。

例如:

Python· 可在网页运行
# -*-coding:utf-8-*-

java = 86
python = 68

if java > 80 and  python > 80:
    print('优秀')
else :
    print('不优秀')

if ( java >= 80  and java < 90 )  or ( python >= 80 and python < 90):
    print('良好')

输出结果:

文本
不优秀
良好

注意:if 有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,此外 and 和 or 的优先级低于 >(大于)、<(小于)等判断符号,即大于和小于在没有括号的情况下会比与或要优先判断。

5、if 嵌套

if 嵌套是指什么呢?

就跟字面意思差不多,指 if 语句中可以嵌套 if 语句。

比如上面说到的例子,也可以用 if 嵌套来写。

Python· 可在网页运行
java = 86
python = 68

if java > 80:
    if python > 80:
        print('优秀')
    else:
        print('不优秀')
else:
    print('不优秀')

输出结果:

文本
不优秀

当然这只是为了说明 if 条件语句是可以嵌套的。如果是这个需求,我个人还是不太建议这样使用 if 嵌套的,因为这样代码量多了,而且嵌套太多,也不方便阅读代码。

6、 Python 3.10+ 的新写法:match / case

各位童鞋,如果你用的是 Python 3.10 或者更新的版本,那么除了 if / elif / else 之外,还多了一个更直观的家伙—— match / case,叫做「结构化模式匹配」(structural pattern matching)。

为什么要专门讲它啊?

我们先看一个需求,假设水哥想根据后台返回的「指令字符串」来做不同的事情:

Python· 可在网页运行
command = 'start'

if command == 'start':
    print('启动')
elif command == 'stop':
    print('停止')
elif command == 'pause':
    print('暂停')
else:
    print('未知指令')

输出的结果:

文本
启动

这样写没毛病,但是当分支多起来的时候,一长串 elif 就显得啰嗦了。我们用 match / case 重写一下:

Python· 可在网页运行
command = 'start'

match command:
    case 'start':
        print('启动')
    case 'stop':
        print('停止')
    case 'pause':
        print('暂停')
    case _:
        print('未知指令')

输出的结果:

文本
启动

这里的 case _ 就是兜底分支,相当于 else,下划线 _ 是个通配符,匹配任何还没被前面 case 命中的情况。

看到这里,善于思考的你可能会问:那这跟 switch / case 不就一样吗?换个语法糖而已嘛。

并不是的, match / case 真正的厉害之处,是它能匹配「结构」,不仅仅是「值」。

来看一个序列匹配的例子,假设产品反馈过来一个坐标数据:

Python· 可在网页运行
point = [10, 20]

match point:
    case [0, 0]:
        print('原点')
    case [x, 0]:
        print(f'在 x 轴上,x = {x}')
    case [0, y]:
        print(f'在 y 轴上,y = {y}')
    case [x, y]:
        print(f'普通点,x = {x},y = {y}')
    case _:
        print('不是二维坐标')

输出的结果:

文本
普通点,x = 10,y = 20

是不是发现,这里不光匹配到了「这是一个长度为 2 的列表」,还顺手把 x 、 y 给「解包」出来了,下面分支里直接就能用。

序列里还可以用 *rest 来收集剩下的元素:

Python· 可在网页运行
nums = [1, 2, 3, 4, 5]

match nums:
    case [first, *rest]:
        print(f'第一个:{first},剩下的:{rest}')

输出的结果:

文本
第一个:1,剩下的:[2, 3, 4, 5]

那么字典呢?

match / case 也能匹配字典的「形状」:

Python· 可在网页运行
response = {'status': 'ok', 'data': [1, 2, 3]}

match response:
    case {'status': 'ok', 'data': data}:
        print(f'成功,拿到数据 {data}')
    case {'status': 'error', 'message': msg}:
        print(f'失败:{msg}')
    case _:
        print('未知响应')

输出的结果:

文本
成功,拿到数据 [1, 2, 3]

更有意思的是,match / case 还能跟「类」一起用,配合 dataclass 食用,效果更佳:

Python· 可在网页运行
from dataclasses import dataclass


@dataclass
class Point:
    x: int
    y: int


p = Point(0, 5)

match p:
    case Point(x=0, y=0):
        print('原点')
    case Point(x=0, y=y):
        print(f'在 y 轴上,y = {y}')
    case Point(x=x, y=0):
        print(f'在 x 轴上,x = {x}')
    case Point(x=x, y=y):
        print(f'普通点 ({x}, {y})')

输出的结果:

文本
在 y 轴上,y = 5

最后,再介绍一个小特性,叫「守卫条件」(guard),就是在 case 后面加一个 if:

Python· 可在网页运行
score = 75

match score:
    case x if x >= 90:
        print('优秀')
    case x if x >= 80:
        print('良好')
    case x if x >= 60:
        print('及格')
    case _:
        print('不及格')

输出的结果:

文本
及格

是不是发现,有了 match / case 之后,代码更结构化也更好读了?

这里也啰嗦一句,match / case 不是用来取代 if / elif 的。简单的「值比较」、「真假判断」,老老实实写 if 反而更清楚;只有当你要根据「数据的结构」来分发逻辑的时候,比如解析 JSON、处理 AST、写解释器之类的场景,match / case 才能真正发挥威力。

练习 1 / 7·if / else:判断及格题目有问题?

已经给你定义了 score = 75。

请用 if / else 判断:

  • 如果 score >= 60:print('及格')
  • 否则:print('不及格')

输出应该是:

文本
及格
main.py
可编辑
🔒做对当前题解锁下一段 ·0/7

推荐一个,全网最全最友好的中文 AI 编程指南: coding.stormzhang.ai

← 上一章04 · Dict 与 Set
条件与循环
下一章 →06 · 函数
本章目录

条件与循环

  1. 教学 01前言
  2. 教学 02一、条件语句
  3. 练习 1if / else:判断及格
  4. 练习 2 🔒elif:成绩等级
  5. 练习 3 🔒and / or:联合条件
  6. 练习 4 🔒match / case:处理指令
  7. 教学 03 🔒二、循环语句
  8. 练习 5 🔒for + range:求和
  9. 练习 6 🔒while:倒计时
  10. 练习 7 🔒continue:1-10 的奇数和
  11. 教学 04 🔒三、条件语句和循环语句综合实例

学习目录