Python 流程控制语句用于控制代码的执行顺序,主要包括条件判断语句(根据条件执行不同代码)和循环语句(重复执行代码块),此外还有用于调整流程的辅助语句(如 break、continue 等)。
一、条件判断语句(if-elif-else)
条件语句根据“条件是否成立”决定执行哪段代码,核心是 if 关键字,配合 elif(else if 的缩写)和 else 实现多分支判断。
语法规则:
- 条件表达式后必须加冒号
: - 缩进(通常 4 个空格)是 Python 区分代码块的标志,同一代码块的缩进必须一致
- 条件表达式的结果为布尔值(
True/False),非布尔值会自动转换(如 0 为False,非 0 为True;空字符串""为False等)
1. 单分支:if
当条件成立时执行代码块,否则不执行。
age = 19
if age >= 18:
print("已成年") # 条件成立,输出:已成年
2. 双分支:if-else
条件成立时执行 if 块,否则执行 else 块(二选一)。
score = 58
if score >= 60:
print("及格")
else:
print("不及格") # 条件不成立,输出:不及格
3. 多分支:if-elif-else
多个条件依次判断,满足第一个条件后执行对应代码块,后续条件不再判断;若所有条件都不满足,执行 else 块(多选一)。
score = 85
if score >= 90:
print("优秀")
elif score >= 80: # 仅当 score < 90 时才判断此条件
print("良好") # 满足,输出:良好
elif score >= 60:
print("及格")
else:
print("不及格")
4. 嵌套条件
条件语句内部可再包含条件语句,实现更复杂的逻辑。
age = 20
has_id = True
if age >= 18:
if has_id:
print("可进入") # 外层和内层条件都成立,输出:可进入
else:
print("需出示身份证")
else:
print("未满18岁,不可进入")
二、循环语句
循环语句用于重复执行某段代码块,Python 提供两种循环:for 循环(遍历序列)和 while 循环(满足条件时重复)。
1. for 循环
用于遍历序列(如列表、字符串、字典、range 等),每次循环取序列中的一个元素,直到遍历结束。
语法:
for 变量 in 序列:
循环体(缩进代码块)
示例:
- 遍历字符串(每个字符):
for char in "Python":
print(char) # 逐行输出:P、y、t、h、o、n
- 遍历列表(每个元素):
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
- 用
range()生成数字序列(常用作计数循环):range(n)生成 0 到 n-1 的整数;range(a, b)生成 a 到 b-1 的整数;range(a, b, step)按步长 step 生成序列。
# 输出 0-4(共5个数)
for i in range(5):
print(i) # 0、1、2、3、4
# 输出 2、4、6(步长为2)
for i in range(2, 8, 2):
print(i) # 2、4、6
2. while 循环
当条件成立时,重复执行循环体,直到条件不成立时结束。
语法:
while 条件:
循环体(缩进代码块)
# 通常需要更新条件(否则可能无限循环)
示例:
- 计数循环(从 0 数到 2):
count = 0
while count < 3:
print(f"计数:{count}")
count += 1 # 必须更新条件,否则无限循环
# 输出:
# 计数:0
# 计数:1
# 计数:2
- 无限循环(需手动控制退出,如用
break):
while True:
user_input = input("输入'q'退出:")
if user_input == 'q':
break # 跳出循环
print(f"你输入了:{user_input}")
三、循环控制语句(break/continue/pass)
用于在循环中调整执行流程。
1. break:强制跳出整个循环
一旦执行 break,当前循环立即结束,后续循环不再执行。
for i in range(10):
if i == 3:
break # 当i=3时跳出循环
print(i) # 输出:0、1、2
2. continue:跳过当前循环的剩余部分,直接进入下一次循环
不终止整个循环,只跳过本次循环中 continue 后的代码。
for i in range(5):
if i == 2:
continue # 跳过i=2的循环体剩余部分
print(i) # 输出:0、1、3、4(跳过了2)
3. pass:空语句,仅作为语法占位符
当语法上需要语句但暂时不执行任何操作时使用(如未完成的代码框架),避免语法错误。
for i in range(3):
if i == 1:
pass # 暂不处理,后续补充
else:
print(i) # 输出:0、2
四、循环的 else 子句(Python 特色)
for 和 while 循环都可搭配 else 子句,当循环正常结束(未被 break 中断)时,执行 else 块的代码。
示例:
# 查找列表中是否有"葡萄"
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
if fruit == "葡萄":
print("找到葡萄")
break
else:
# 循环正常结束(未执行break)时执行
print("未找到葡萄") # 输出:未找到葡萄
总结
- 条件语句(
if-elif-else):根据条件分支执行代码,依赖缩进区分块。 - 循环语句:
for适合遍历序列,while适合条件循环。 - 控制语句:
break跳出循环,continue跳过本次,pass作为占位。 - 循环的
else:判断循环是否正常结束,是 Python 独特语法。
通过组合这些语句,可实现复杂的逻辑控制,是编写程序的基础。
编程语言三种基本结构
1.顺序结构:从上向下依次执行所有代码。
2.分支结构:根据条件选择执行部分代码。
3.循环结构:重复执行某一段代码,当循环达到预设次数或条件时,退出循环结构。
# 三目运算 变量 = 值1 if 条件 else 值2
print('偶数' if int(input('请输入任意整数:')) % 2 == 0 else '奇数')
# try except (异常处理)
# 异常处理
try:
a = 3 / 0
except Exception as e:
print(e)
else:
# 程序没有错误时,执行
print('程序没有出错!')
finally:
# 不论是否出错都会执行
print('都要执行finally!')
案例
import os
import time
while 1:
print(f'\r{time.strftime("%H:%M:%S")}', end='')
if time.strftime("%H:%M:%S") == '12:30:50':
os.system("mspaint")
break
time.sleep(1)
# for 迭代
s = 'hello' # String == Array[char]
lis = [1, 2, 3, 'a', ['b', 'c', 'd']]
for i in lis:
print(i, 'hello')
print(range(5)) # 生成范围内的整数,生成n个数 默认从0开始到n-1
# 类型转换 -> list
print(list(range(5)))
# for 循环 range(开始值,结束值,步长) [0,n)
for i in range(10, 0, -1):
print(i)
内置函数 range() 常用于遍历数字序列,该函数可以生成算术级数:
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
生成的序列不包含给定的终止数值;range(10) 生成 10 个值,这是一个长度为 10 的序列,其中的元素索引都是合法的。range 可以不从 0 开始,还可以按指定幅度递增(递增幅度称为 '步进',支持负数):
>>> list(range(5, 10))
[5, 6, 7, 8, 9]
>>> list(range(0, 10, 3))
[0, 3, 6, 9]
>>> list(range(-10, -100, -30))
[-10, -40, -70]
range() 和 len() 组合在一起,可以按索引迭代序列:
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb
不过,大多数情况下,enumerate() 函数更便捷,详见 循环的技巧 。
如果只输出 range,会出现意想不到的结果:
>>> range(10)
range(0, 10)
range() 返回对象的操作和列表很像,但其实这两种对象不是一回事。迭代时,该对象基于所需序列返回连续项,并没有生成真正的列表,从而节省了空间。
这种对象称为可迭代对象 iterable,函数或程序结构可通过该对象获取连续项,直到所有元素全部迭代完毕。for 语句就是这样的架构,sum() 是一种把可迭代对象作为参数的函数:
>>> sum(range(4)) # 0 + 1 + 2 + 3
6
Python代码编写的要求
- 优雅
- 简洁
- 明确
# 显示Python之禅
import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
条件的真假
真:
1. 除了0以外的所有数字都是真的。
2. 非空的字符串、列表、集合、元组、字典都是真的。
3. True
假:
1. 0 0.0
2. '' [] () {}
3. False
4. None
注意:空字符串表示引号中间没有任何(包括空格)内容
容器类型的数据结构[‘’] [ ]
运算:
算数运算 + * / // ** %
比较运算 > < == != <= >=
逻辑运算 and (与运算&&) or(或运算||) not(非运算!)
| 运算符 | 条件1 | 条件2 | 结果 |
|---|---|---|---|
| and (一假全假,全真为真) | True | True | True |
| or (一个真全真,全假为假) | True | False | True |
| not (真变假,假变真) | True | False |
# 1.判断某年是否是闰年
# A.能被4整除,但不能被100整除
# B.能被400整除
year = int(input("请输入年份"))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print(f"{year}是闰年!")
else:
print(f"{year}不是闰年!")
编程的三种范式
- 结构化编程
- 函数式编程
- 面向对象编程
字符串格式化: 将变量值嵌入到一个字符串中。f"{变量}" %类型(d整数、f浮点数、s字符串)
转义字符: \n 换行 \t 制表符 \r 回车 \\ r"" 让转义字符不生效