Python 基础语法详解(3):顺序语句、条件语句和循环语句一篇讲清楚

🔥 星恒随风: 个人主页 ❄️ 个人专栏: 《指针合集》 | 《C语言基础》 | 《数据结构》 | 《机器学习导论》 | 《前端基础》 | 《python基础》 ✨ 数据即知识,压缩即智能
目录
- [Python 基础语法详解(3):顺序语句、条件语句和循环语句一篇讲清楚](#Python 基础语法详解(3):顺序语句、条件语句和循环语句一篇讲清楚)
-
- 前言
- 一、顺序语句:代码默认从上到下执行
- 二、为什么顺序很重要?
- 三、条件语句:让程序拥有"选择能力"
- [四、if 语句:最基础的条件判断](#四、if 语句:最基础的条件判断)
- [五、if 语句的执行流程](#五、if 语句的执行流程)
- 六、if-else:二选一逻辑
- [七、if-else 的核心特点](#七、if-else 的核心特点)
- 八、if-elif-else:多分支判断
- [九、elif 不是 else if](#九、elif 不是 else if)
- [十、Python 条件语句的几个语法特点](#十、Python 条件语句的几个语法特点)
-
- [1. 条件后面不需要小括号](#1. 条件后面不需要小括号)
- [2. 条件后面必须有冒号](#2. 条件后面必须有冒号)
- [3. Python 使用缩进表示代码块](#3. Python 使用缩进表示代码块)
- [十一、缩进和代码块:Python 最重要的格式规则](#十一、缩进和代码块:Python 最重要的格式规则)
-
- [代码 1:两行都属于 if](#代码 1:两行都属于 if)
- [代码 2:只有第一行属于 if](#代码 2:只有第一行属于 if)
- 十二、缩进错误会直接报错
- 十三、嵌套条件语句
- 十四、练习一:判断奇数和偶数
- [十五、练习二:判断正数、负数和 0](#十五、练习二:判断正数、负数和 0)
- 十六、练习三:判断闰年
- 十七、pass:什么都不做的空语句
- [十八、为什么需要 pass?](#十八、为什么需要 pass?)
- 十九、循环语句:让代码反复执行
- [二十、while 循环](#二十、while 循环)
- [二十一、while 循环的三个关键点](#二十一、while 循环的三个关键点)
- [二十二、案例:计算 1 到 100 的和](#二十二、案例:计算 1 到 100 的和)
- [二十三、案例:计算 5 的阶乘](#二十三、案例:计算 5 的阶乘)
- [二十四、案例:求 1! + 2! + 3! + 4! + 5!](#二十四、案例:求 1! + 2! + 3! + 4! + 5!)
- 二十五、嵌套循环怎么理解?
- [二十六、for 循环](#二十六、for 循环)
- [二十七、range() 函数](#二十七、range() 函数)
-
- [1. range(stop)](#1. range(stop))
- [2. range(start, stop)](#2. range(start, stop))
- [3. range(start, stop, step)](#3. range(start, stop, step))
- [二十八、for 循环求 1 到 100 的和](#二十八、for 循环求 1 到 100 的和)
- [二十九、while 和 for 怎么选?](#二十九、while 和 for 怎么选?)
-
- [1. 明确知道循环次数,用 for](#1. 明确知道循环次数,用 for)
- [2. 不确定循环次数,用 while](#2. 不确定循环次数,用 while)
- 三十、continue:结束本次循环
- 三十一、break:结束整个循环
- [三十二、continue 和 break 的区别](#三十二、continue 和 break 的区别)
- 三十三、案例:输入若干数字,求平均值
- 三十四、常见易错点总结
-
- [1. if 后面忘记写冒号](#1. if 后面忘记写冒号)
- [2. 缩进不一致](#2. 缩进不一致)
- [3. 把 elif 写成 else if](#3. 把 elif 写成 else if)
- [4. while 循环忘记更新变量](#4. while 循环忘记更新变量)
- [5. 混淆 break 和 continue](#5. 混淆 break 和 continue)
- [6. range 的结束值不包含在内](#6. range 的结束值不包含在内)
- [7. input 得到的是字符串](#7. input 得到的是字符串)
- 三十六、总结
前言
在学习 Python 基础语法时,我们前面已经接触过变量、数据类型、输入输出、运算符和类型转换。
这些内容主要解决的是:
数据怎么表示、怎么输入、怎么计算、怎么输出。
但是,真正的程序并不是简单地从头到尾"算一遍"就结束。
很多时候,程序需要根据不同情况做出不同选择,也需要把某些操作反复执行。
比如:
- 打印 1 到 100;
- 计算 1 到 100 的和;
- 不断输入数字,直到用户主动结束。
这些逻辑都离不开三类基础语句:
- 顺序语句
- 条件语句
- 循环语句
这一篇文章就围绕这三类语句展开,帮助你理解 Python 程序到底是如何一步一步执行的。
一、顺序语句:代码默认从上到下执行
默认情况下,Python 程序会按照代码书写顺序,从上到下依次执行。
例如:
python
print("1")
print("2")
print("3")
输出结果一定是:
python
1
2
3
不会变成:
python
3
2
1
这种按照先后顺序依次执行的代码,就叫顺序语句。
二、为什么顺序很重要?
编程是一件非常明确的事情。
计算机不会自己猜测你想先做什么、后做什么。你写在前面的代码先执行,写在后面的代码后执行。
例如:
python
a = 10
b = a + 5
print(b)
这段代码的执行顺序是:
- 先创建变量
a,并保存10; - 再计算
a + 5,把结果赋给b; - 最后输出
b。
输出结果是:
python
15
但是如果把顺序写反:
python
b = a + 5
a = 10
print(b)
程序会直接报错。
因为执行第一行时,变量 a 还没有被定义。
所以,顺序语句虽然简单,但它是所有程序逻辑的基础。
三、条件语句:让程序拥有"选择能力"
顺序语句只能从上到下执行。
但是现实中的问题经常不是一条路走到底。
比如:
如果成绩大于等于 60,输出"及格";否则输出"不及格"。
这时候就需要条件语句。
条件语句也叫分支语句,它表达的是:
如果某个条件成立,就执行一段代码;否则执行另一段代码。
Python 中常见的条件语句有三种形式:
ifif-elseif-elif-else
下面逐个来看。
四、if 语句:最基础的条件判断
if 是最简单的条件语句。
语法格式:
python
if 条件:
条件成立时执行的代码
示例:
python
score = int(input("请输入成绩:"))
if score >= 60:
print("及格")
如果输入:
python
80
输出:
python
及格
如果输入:
python
50
程序不会输出"及格"。
因为 score >= 60 不成立,if 下面的代码块不会执行。
五、if 语句的执行流程
来看这段代码:
python
age = 20
if age >= 18:
print("已经成年")
print("程序结束")
执行流程是:
- 判断
age >= 18是否成立; - 如果成立,执行
print("已经成年"); - 无论条件是否成立,最后都会执行
print("程序结束")。
所以输出结果是:
python
已经成年
程序结束
如果把 age 改成 16:
python
age = 16
if age >= 18:
print("已经成年")
print("程序结束")
输出结果是:
python
程序结束
因为 age >= 18 不成立,所以 if 内部的语句被跳过了。
六、if-else:二选一逻辑
如果希望条件成立时执行一段代码,条件不成立时执行另一段代码,就可以使用 if-else。
语法格式:
python
if 条件:
条件成立时执行的代码
else:
条件不成立时执行的代码
示例:判断一个整数是奇数还是偶数。
python
num = int(input("请输入一个整数:"))
if num % 2 == 0:
print("偶数")
else:
print("奇数")
如果输入:
python
10
输出:
python
偶数
如果输入:
python
9
输出:
python
奇数
这里的核心判断是:
python
num % 2 == 0
% 表示取余。
如果一个数除以 2 的余数是 0,说明它是偶数;否则就是奇数。
七、if-else 的核心特点
if-else 表示的是二选一。
也就是说:
- 条件成立,执行
if里面的代码; - 条件不成立,执行
else里面的代码。
两条分支一定会执行其中一条,但不会两条都执行。
可以把它理解成岔路口:
条件成立走左边,条件不成立走右边。
八、if-elif-else:多分支判断
有些问题不是二选一,而是多选一。
比如:
输入一个整数,判断它是正数、负数还是 0。
这时候就需要 if-elif-else。
语法格式:
python
if 条件1:
条件1成立时执行
elif 条件2:
条件1不成立,条件2成立时执行
else:
前面条件都不成立时执行
示例:
python
num = int(input("请输入一个整数:"))
if num > 0:
print("正数")
elif num < 0:
print("负数")
else:
print("为 0")
如果输入 10,输出:
python
正数
如果输入 -5,输出:
python
负数
如果输入 0,输出:
python
为 0
九、elif 不是 else if
很多语言中,多分支会写成:
cpp
else if
但是 Python 中写的是:
python
elif
它可以理解成 else if 的简写。
所以 Python 中不要写:
python
else if num < 0:
正确写法是:
python
elif num < 0:
十、Python 条件语句的几个语法特点
Python 的条件语句和 C、C++、Java 有明显区别。
1. 条件后面不需要小括号
Python 写法:
python
if score >= 60:
print("及格")
C / C++ / Java 中通常会写:
cpp
if (score >= 60)
{
printf("及格");
}
Python 中不强制写小括号。
2. 条件后面必须有冒号
Python 中,if、elif、else 后面都要写冒号。
正确:
python
if score >= 60:
print("及格")
错误:
python
if score >= 60
print("及格")
少了冒号,程序会直接报语法错误。
3. Python 使用缩进表示代码块
C、C++、Java 通常使用 {} 表示代码块。
Python 使用缩进表示代码块。
python
if score >= 60:
print("及格")
print("继续努力")
这两行 print 前面都有缩进,所以都属于 if 代码块。
十一、缩进和代码块:Python 最重要的格式规则
代码块指的是一组放在一起执行的代码。
在 Python 中,缩进决定代码属于哪个代码块。
看下面两个例子。
代码 1:两行都属于 if
python
a = input("请输入一个整数:")
if a == "1":
print("hello")
print("world")
这里:
python
print("hello")
print("world")
都有缩进,所以它们都属于 if 代码块。
只有当 a == "1" 成立时,它们才会执行。
代码 2:只有第一行属于 if
python
a = input("请输入一个整数:")
if a == "1":
print("hello")
print("world")
这里:
python
print("world")
没有缩进,所以它不属于 if 代码块。
无论 a == "1" 是否成立,它都会执行。
十二、缩进错误会直接报错
Python 对缩进非常严格。
错误写法:
python
if True:
print("hello")
正确写法:
python
if True:
print("hello")
建议统一使用 4 个空格表示一级缩进。
不要一会儿用 Tab,一会儿用空格。缩进不统一,会导致代码可读性变差,严重时会直接报错。
十三、嵌套条件语句
条件语句内部还可以继续写条件语句,这叫嵌套条件。
示例:
python
a = input("请输入第一个整数:")
b = input("请输入第二个整数:")
if a == "1":
if b == "2":
print("hello")
print("world")
print("python")
这段代码中有三种缩进层级:
python
print("hello")
有两级缩进,属于:
python
if b == "2":
这个代码块。
python
print("world")
有一级缩进,属于:
python
if a == "1":
这个代码块。
python
print("python")
没有缩进,不属于任何 if,所以无论条件是否成立都会执行。
嵌套条件虽然有用,但不要嵌套太深。
如果一层套一层太多,代码会变得很难读。
十四、练习一:判断奇数和偶数
需求:
输入一个整数,判断它是奇数还是偶数。
代码:
python
num = int(input("请输入一个整数:"))
if num % 2 == 0:
print("偶数")
else:
print("奇数")
十五、练习二:判断正数、负数和 0
需求:
输入一个整数,判断它是正数、负数还是 0。
代码:
python
num = int(input("请输入一个整数:"))
if num > 0:
print("正数")
elif num < 0:
print("负数")
else:
print("为 0")
十六、练习三:判断闰年
闰年的判断规则是:
- 普通年份能被 4 整除,并且不能被 100 整除,是闰年;
- 世纪年份必须能被 400 整除,才是闰年。
例如:
- 2000 年是闰年;
- 1900 年不是闰年;
- 2024 年是闰年;
- 2023 年不是闰年。
代码:
python
year = int(input("请输入年份:"))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print("闰年")
else:
print("平年")
这段代码中:
python
year % 4 == 0
表示年份能被 4 整除。
python
year % 100 != 0
表示年份不能被 100 整除。
python
year % 400 == 0
表示年份能被 400 整除。
注意,不要把最后一部分写成:
python
or year % 400
这样逻辑是不严谨的。
十七、pass:什么都不做的空语句
有时候,我们暂时还没想好某个分支里具体写什么,但语法上又必须放一条语句。
这时候可以使用 pass。
pass 表示空语句。
它什么都不做,只是占一个位置。
示例:
python
num = int(input("请输入一个整数:"))
if num != 1:
pass
else:
print("hello")
这段代码的意思是:
- 如果
num != 1,什么都不做; - 否则输出
hello。
十八、为什么需要 pass?
下面这种写法是不合法的:
python
num = int(input("请输入一个整数:"))
if num != 1:
else:
print("hello")
因为 if 后面的代码块不能为空。
如果暂时不想写,就可以使用:
python
pass
占位。
pass 常见于:
- 暂时没实现的函数;
- 暂时没写完的分支;
- 暂时占位的类;
- 调试时临时保留结构。
例如:
python
def todo():
pass
十九、循环语句:让代码反复执行
有些任务需要重复执行。
比如:
- 打印 1 到 10;
- 计算 1 到 100 的和;
- 计算 5 的阶乘;
- 不断输入数字直到用户结束;
- 遍历一组数据。
如果不用循环,打印 1 到 5 可能要写成:
python
print(1)
print(2)
print(3)
print(4)
print(5)
那如果要打印 1 到 100 呢?
显然不可能手写 100 行。
这时候就需要循环。
Python 中最常见的循环有两种:
while循环for循环
二十、while 循环
while 循环的语法格式是:
python
while 条件:
循环体
含义是:
只要条件成立,就一直执行循环体。
示例:打印 1 到 10。
python
num = 1
while num <= 10:
print(num)
num += 1
执行流程是:
num初始值为 1;- 判断
num <= 10; - 条件成立,执行循环体;
- 输出
num; - 执行
num += 1; - 回到条件判断;
- 当
num变成 11 时,条件不成立,循环结束。
二十一、while 循环的三个关键点
写 while 循环时,一般要关注三个部分:
- 循环变量初始化;
- 循环条件;
- 循环变量更新。
例如:
python
num = 1 # 初始化
while num <= 10: # 条件
print(num)
num += 1 # 更新
如果忘记更新循环变量:
python
num = 1
while num <= 10:
print(num)
程序会一直输出 1,形成死循环。
所以写 while 时一定要检查:
循环有没有机会结束?
二十二、案例:计算 1 到 100 的和
需求:
求 1 + 2 + 3 + ... + 100。
代码:
python
total = 0
num = 1
while num <= 100:
total += num
num += 1
print(total)
解释:
total用来保存累加结果;num从 1 开始;- 每次循环把
num加到total中; - 然后
num += 1; - 直到
num超过 100,循环结束。
二十三、案例:计算 5 的阶乘
阶乘的含义是:
python
5! = 1 * 2 * 3 * 4 * 5
代码:
python
result = 1
n = 1
while n <= 5:
result *= n
n += 1
print(result)
输出:
python
120
这里的核心是:
python
result *= n
它等价于:
python
result = result * n
二十四、案例:求 1! + 2! + 3! + 4! + 5!
这个问题比单独求 5! 更复杂一些。
因为它需要先分别求:
python
1!
2!
3!
4!
5!
再把它们加起来。
代码:
python
num = 1
total = 0
while num <= 5:
factor_result = 1
i = 1
while i <= num:
factor_result *= i
i += 1
total += factor_result
num += 1
print(total)
这里使用了两重循环:
- 外层循环负责控制当前要求几的阶乘;
- 内层循环负责计算当前这个数的阶乘。
二十五、嵌套循环怎么理解?
对于嵌套循环,可以这样理解:
外层循环每执行一次,内层循环会完整执行一轮。
在上面的案例中:
- 外层循环第一次:计算
1! - 外层循环第二次:计算
2! - 外层循环第三次:计算
3! - 外层循环第四次:计算
4! - 外层循环第五次:计算
5!
内层循环负责完成每一个阶乘的具体乘法。
嵌套循环很常见,但也要注意不要嵌套太深,否则代码会变得难读。
二十六、for 循环
Python 中的 for 循环通常用来遍历一个可迭代对象。
语法格式:
python
for 循环变量 in 可迭代对象:
循环体
所谓可迭代对象,可以简单理解成:
能够一个一个取出元素的数据。
比如:
range(...)- 字符串
- 列表
- 元组
- 字典
这一篇先重点看 range() 和 for 的配合。
二十七、range() 函数
range() 经常和 for 循环一起使用。
它可以生成一个整数序列。
1. range(stop)
python
for i in range(5):
print(i)
输出:
python
0
1
2
3
4
range(5) 生成的是:
python
0, 1, 2, 3, 4
不包含 5。
2. range(start, stop)
python
for i in range(1, 11):
print(i)
输出:
python
1
2
3
4
5
6
7
8
9
10
range(1, 11) 表示:
从 1 开始,到 11 之前结束。
也就是左闭右开:
python
[1, 11)
包含 1,不包含 11。
3. range(start, stop, step)
第三个参数表示步长。
打印 2、4、6、8、10:
python
for i in range(2, 12, 2):
print(i)
倒序打印 10 到 1:
python
for i in range(10, 0, -1):
print(i)
这里的 -1 表示每次减少 1。
二十八、for 循环求 1 到 100 的和
使用 for 循环可以更简洁地完成累加。
python
total = 0
for i in range(1, 101):
total += i
print(total)
和 while 版本相比,for 版本不需要手动写:
python
i += 1
因为 range() 会自动生成每一个数。
二十九、while 和 for 怎么选?
while 和 for 都能实现循环,但使用场景略有不同。
1. 明确知道循环次数,用 for
例如:
python
for i in range(10):
print(i)
适合:
- 打印固定次数;
- 遍历一个范围;
- 遍历列表、字符串等数据。
2. 不确定循环次数,用 while
例如:
python
while True:
password = input("请输入密码:")
if password == "123456":
break
适合:
- 一直输入直到正确;
- 一直运行直到满足某个条件;
- 用户菜单系统;
- 游戏主循环。
一句话总结:
次数明确用 for,条件驱动用 while。
三十、continue:结束本次循环
continue 的作用是:
跳过本次循环剩余代码,直接进入下一次循环。
示例:模拟吃包子,吃第 3 个包子时发现有虫,跳过它。
python
for i in range(1, 6):
if i == 3:
continue
print(f"吃完第 {i} 个包子")
输出:
python
吃完第 1 个包子
吃完第 2 个包子
吃完第 4 个包子
吃完第 5 个包子
第 3 个包子被跳过了,但循环没有结束,后面的第 4 个、第 5 个仍然继续执行。
三十一、break:结束整个循环
break 的作用是:
直接结束整个循环。
示例:吃第 3 个包子时发现半只虫,直接不吃了。
python
for i in range(1, 6):
if i == 3:
break
print(f"吃完第 {i} 个包子")
输出:
python
吃完第 1 个包子
吃完第 2 个包子
循环在第 3 次时直接结束,所以第 4 个、第 5 个都不会再处理。
三十二、continue 和 break 的区别
| 关键字 | 作用 | 类比 |
|---|---|---|
continue |
结束本次循环,进入下一次循环 | 这个包子不吃了,继续吃下一个 |
break |
结束整个循环 | 不吃了,直接走人 |
简单记:
continue是跳过一次,break是彻底结束。
三十三、案例:输入若干数字,求平均值
需求:
用户不断输入数字,输入
;表示结束,最后输出平均值。
代码:
python
total = 0
count = 0
while True:
num = input("请输入数字,输入 ; 结束:")
if num == ";":
break
num = float(num)
total += num
count += 1
if count == 0:
print("没有输入任何数字")
else:
print(f"平均值是:{total / count}")
这个案例把多个知识点串起来了:
while True用于持续输入;break用于结束循环;float()用于类型转换;total用于累加;count用于统计输入数量;- 最后通过
total / count计算平均值。
三十四、常见易错点总结
1. if 后面忘记写冒号
错误:
python
if age >= 18
print("成年")
正确:
python
if age >= 18:
print("成年")
2. 缩进不一致
错误:
python
if age >= 18:
print("成年")
print("可以工作")
正确:
python
if age >= 18:
print("成年")
print("可以工作")
3. 把 elif 写成 else if
错误:
python
if num > 0:
print("正数")
else if num < 0:
print("负数")
正确:
python
if num > 0:
print("正数")
elif num < 0:
print("负数")
4. while 循环忘记更新变量
错误:
python
i = 1
while i <= 10:
print(i)
这会形成死循环。
正确:
python
i = 1
while i <= 10:
print(i)
i += 1
5. 混淆 break 和 continue
continue 是跳过本轮循环。
break 是结束整个循环。
这两个关键字都能改变循环流程,但作用完全不同。
6. range 的结束值不包含在内
python
range(1, 10)
生成的是:
python
1 到 9
不包含 10。
如果想生成 1 到 10,要写:
python
range(1, 11)
7. input 得到的是字符串
如果要进行数字比较或运算,要先转换类型:
python
age = int(input("请输入年龄:"))
if age >= 18:
print("成年")
不要直接写:
python
age = input("请输入年龄:")
if age >= 18:
print("成年")
这样会报错,因为字符串不能直接和整数比较大小。
三十六、总结
这一篇主要讲了 Python 基础语法中的控制流程。
第一,顺序语句让程序从上到下依次执行。
第二,条件语句让程序拥有选择能力。
第三,循环语句让程序可以重复执行任务。
其中:
if用于单分支判断;if-else用于二选一;if-elif-else用于多分支;- 缩进决定代码块归属;
pass用于占位;while适合条件驱动循环;for适合遍历范围或可迭代对象;continue用于跳过本次循环;break用于结束整个循环。