Python流程控制
-
本章学习知识点
-
条件判断:if-elif-else、三元表达式(result = a if cond else b)
-
循环:for 循环(遍历 range / 容器)、while 循环、循环控制(break/continue)
-
输入输出:input ()(注意类型转换)、print ()(格式化输出:f-string/format)
-
一、输入输出
输入输出是程序与用户交互的桥梁,input() 用于获取用户输入,print() 用于展示结果。
1.1、input ()
-
语法:
变量 = input("提示信息:")- 核心特性:
- 无论用户输入什么,
input()都返回 字符串类型(需手动转换为其他类型) - 执行
input()时,程序会暂停,等待用户输入并按回车后继续 - 提示信息可选(如
input()直接等待输入,无提示)
- 无论用户输入什么,
- 核心特性:
-
基础用法(字符串输入)
python# 示例:获取字符串输入 name = input("请输入你的姓名:") print(f"你好,{name}!") # 直接使用字符串输入 print(f"name 的类型:{type(name)}") # 输出 <class 'str'> -
类型转换(关键!处理数字输入)
python# 用户输入数字(如年龄、成绩)时,需用 int()/float() 转换为数值类型,否则无法进行算术运算。 # 示例1:转换为整数(int()) age_input = input("请输入你的年龄:") age = int(age_input) # 转换为整数 print(f"明年你将是 {age + 1} 岁") # 可正常进行算术运算 # 示例2:转换为浮点数(float()) height_input = input("请输入你的身高(米):") height = float(height_input) print(f"你的身高是 {height} 米,即 {height * 100} 厘米") # 示例3:异常处理(避免输入非数字报错) try: score = int(input("请输入你的成绩:")) print(f"你的成绩是 {score} 分") except ValueError: print("输入错误!请输入整数成绩")
1.2、print ()
print() 用于输出内容,支持多种格式化方式,核心是让输出结果更易读。
-
语法:
print(内容1, 内容2, ..., sep=' ', end='\n')-
sep:多个内容之间的分隔符(默认空格) -
end:输出结束后的字符(默认换行\n,可改为空字符串''不换行)python# 示例1:输出多个内容 print("Python", "流程控制", "手册") # 分隔符默认空格,输出:Python 流程控制 手册 print("Python", "流程控制", "手册", sep="|") # 分隔符改为 |,输出:Python|流程控制|手册 # 示例2:控制换行 print("第一行", end="") # 结束不换行 print("第二行") # 输出:第一行第二行 # 示例3:输出变量 name = "小红" age = 18 print("姓名:", name, "年龄:", age) # 输出:姓名: 小红 年龄: 18
-
-
格式化输出(重点!三种常用方式)
-
方式 1:f-string(Python3.6+ 推荐,简洁高效)
-
语法:
print(f"字符串内容 {变量/表达式} 字符串内容") -
特点:
- 用
f开头,变量 / 表达式放在{}中 - 支持直接在
{}中写表达式(如运算、函数调用) - 可读性最强,书写最简洁
- 用
-
示例
python# 示例1:基础变量格式化 name = "小明" age = 20 print(f"姓名:{name},年龄:{age}") # 输出:姓名:小明,年龄:20 # 示例2:表达式格式化 score = 85 print(f"成绩:{score} 分,等级:{'优秀' if score >= 90 else '良好' if score >= 80 else '及格'}") print(f"成绩的 2 倍:{score * 2}") # 支持运算表达式 # 示例3:数字格式化(保留小数、百分比等) pi = 3.1415926 print(f"圆周率(保留 2 位小数):{pi:.2f}") # 输出 3.14 print(f"圆周率(保留 4 位小数):{pi:.4f}") # 输出 3.1416 print(f"百分比格式:{0.75:.2%}") # 输出 75.00% print(f"整数补零(3 位):{5:03d}") # 输出 005
-
-
方式 2:format () 方法(兼容性强,支持 Python2/3)
-
语法:
print("字符串内容 {} 字符串内容".format(变量1, 变量2, ...)) -
特点:用
{}作为占位符,通过format()传入变量,支持位置参数、关键字参数 -
示例
python# 示例1:位置参数 name = "小李" age = 22 print("姓名:{},年龄:{}".format(name, age)) # 按顺序匹配 print("年龄:{1},姓名:{0}".format(name, age)) # 按索引匹配(0 对应 name,1 对应 age) # 示例2:关键字参数 print("姓名:{n},年龄:{a}".format(n="小张", a=25)) # 按关键字匹配 # 示例3:数字格式化(与 f-string 类似) pi = 3.1415926 print("圆周率(保留 2 位小数):{:.2f}".format(pi)) # 输出 3.14 print("整数补零(3 位):{:03d}".format(8)) # 输出 008
-
-
方式 3:% 格式化(老式方法,了解即可)
-
语法:
print("字符串内容 %s 字符串内容" % 变量) -
占位符:
%s(字符串)、%d(整数)、%f(浮点数) -
特点:兼容性最强,但可读性差,不推荐优先使用
-
示例
pythonname = "小王" age = 19 pi = 3.14159 print("姓名:%s,年龄:%d" % (name, age)) # 输出:姓名:小王,年龄:19 print("圆周率:%.2f" % pi) # 输出:圆周率:3.14
-
-
二、条件判断
if 语句(单条件判断)、if-elif-else、嵌套条件判断、三元表达式
-
基础语法:if 语句(单条件判断)
-
说明:条件表达式可以是布尔值、比较运算、逻辑运算等,结果必须是
True或Falsepythonif 条件表达式: # 条件表达式结果为 True 时执行 代码块 # 缩进 4 空格 -
示例
python# 示例1:布尔值条件 is_rainy = True if is_rainy: print("带雨伞出门") # 条件为 True,执行该代码块 # 示例2:比较运算条件 age = 18 if age >= 18: print("已成年,可独立办理业务") # 18 >= 18 为 True,执行 # 示例3:逻辑运算条件 score = 85 if score >= 80 and score <= 100: print("成绩优秀") # 85 在 80-100 之间,执行
-
-
多条件判断:if-elif-else
-
特点:互斥性,只要有一个条件满足,后续条件不再判断(效率优化)
pythonif 条件1: 代码块1 # 条件1 为 True 时执行 elif 条件2: 代码块2 # 条件1 为 False,条件2 为 True 时执行 elif 条件3: 代码块3 # 前两个条件都为 False,条件3 为 True 时执行 else: 代码块4 # 所有条件都为 False 时执行 -
示例
python# 实战:成绩分级 score = 75 if score >= 90: print("优秀") elif score >= 80: print("良好") elif score >= 60: print("及格") else: print("不及格") # 75 >=60 为 True,输出"及格" # 实战:用户权限判断 user_role = "editor" # 角色:admin/editor/visitor if user_role == "admin": print("拥有所有权限:增删改查") elif user_role == "editor": print("拥有编辑权限:增改查") else: print("拥有只读权限:查询") # 输出"拥有编辑权限:增改查"
-
-
嵌套条件判断(条件内套条件)
-
语法:在
if/elif/else的代码块中,再嵌套一层或多层if语句 -
适用场景:需要先满足外层条件,再判断内层条件
python# 实战:登录验证(嵌套条件) username = "admin" password = "123456" is_verified = True # 是否已实名认证 if username == "admin" and password == "123456": print("账号密码验证通过") if is_verified: print("已实名认证,登录成功") # 外层条件满足,内层条件也满足 else: print("未实名认证,请完成认证后登录") else: print("账号或密码错误")
-
-
三元表达式(简洁版 if-else)
-
语法:
结果1 if 条件 else 结果2- 条件为
True时,返回结果1 - 条件为
False时,返回结果2
- 条件为
-
适用场景:简单的二选一逻辑(替代简短的
if-else,代码更简洁)python# 示例1:基础用法 age = 20 result = "成年" if age >= 18 else "未成年" print(result) # 输出"成年" # 示例2:结合运算 a = 10 b = 20 max_num = a if a > b else b print(max_num) # 输出 20(a < b,返回 b) # 示例3:嵌套三元表达式(不推荐多层,可读性差) score = 70 result = "优秀" if score >= 90 else "良好" if score >= 80 else "及格" if score >= 60 else "不及格" print(result) # 输出"及格" # 对比:三元表达式 vs if-else(简洁性体现) # if-else 写法(3行) if score >= 60: res = "通过" else: res = "未通过" # 三元表达式写法(1行) res = "通过" if score >= 60 else "未通过"
-
-
条件判断易错点
- 忘记缩进:
if后面的代码块必须缩进 4 空格,否则报错 - 条件表达式遗漏
::if 条件:末尾的冒号不能少(语法要求) - 多条件用
if而非elif:导致重复判断(如成绩分级用多个if会重复输出) - 三元表达式嵌套过多:超过 2 层建议用
if-elif-else,保证可读性
- 忘记缩进:
三、循环语句
Python 提供两种循环:
for循环(适合已知循环次数)和while循环(适合未知循环次数)。
3.1、for循环
说明:遍历循环:已知次数 / 可迭代对象, 三种: 遍历 range, 遍历容器,枚举遍历
-
语法
bashfor 变量 in 可迭代对象: 代码块 # 缩进 4 空格- 可迭代对象:能逐一取出元素的对象,如
range、列表、字符串、字典、集合等 - 核心:遍历可迭代对象的每个元素,执行一次代码块
- 可迭代对象:能逐一取出元素的对象,如
-
遍历 range(生成整数序列,适合固定次数循环)
-
语法:
range(n):生成 0 ~ n-1 的整数(如range(5)→ 0,1,2,3,4)range(start, end):生成 start ~ end-1 的整数(左闭右开,如range(1,5)→ 1,2,3,4)range(start, end, step):步长为 step(每次递增 / 递减 step,如range(1,10,2)→ 1,3,5,7,9)
-
示例
python# 示例1:循环 5 次(range(5)) for i in range(5): print(f"第 {i+1} 次循环") # i 从 0 到 4,输出 1-5 次 # 示例2:循环 1-10(range(1,11)) sum_1_10 = 0 for num in range(1, 11): sum_1_10 += num # 累加 1-10 的和 print("1-10 的和:", sum_1_10) # 输出 55 # 示例3:步长为 3(range(3, 15, 3)) for num in range(3, 15, 3): print(num, end=" ") # 输出 3 6 9 12
-
-
遍历容器(列表、字符串、字典等)
-
示例
python# 示例1:遍历列表 fruits = ["苹果", "香蕉", "橙子"] for fruit in fruits: print(f"我喜欢吃 {fruit}") # 依次输出每个水果 # 示例2:遍历字符串(逐个字符) s = "Python" for char in s: print(f"字符:{char}") # 输出 P y t h o n # 示例3:遍历字典(三种方式) person = {"name": "小明", "age": 20, "gender": "男"} # 方式1:遍历键(默认) for key in person: print(f"键:{key},值:{person[key]}") # 方式2:遍历键值对(推荐) for key, value in person.items(): print(f"键:{key},值:{value}") # 方式3:遍历值 for value in person.values(): print(f"值:{value}") # 示例4:遍历集合(无序,去重) nums = {1, 2, 2, 3} for num in nums: print(num, end=" ") # 输出 1 2 3(无序)
-
-
枚举遍历(enumerate:获取索引 + 元素)
-
语法:
for 索引, 元素 in enumerate(可迭代对象, start=0): -
作用:遍历的同时获取元素的索引(默认从 0 开始,
start可指定起始值) -
示例
python# 示例:枚举列表(索引从 1 开始) courses = ["语文", "数学", "英语"] for idx, course in enumerate(courses, start=1): print(f"第 {idx} 门课:{course}") # 输出: # 第 1 门课:语文 # 第 2 门课:数学 # 第 3 门课:英语 # 示例:枚举字符串(索引从 0 开始) s = "Hello" for idx, char in enumerate(s): print(f"索引 {idx}:{char}")
-
3.2、while循环
说明:条件循环:未知次数,满足条件就循环, 两种: break 和 continue
-
语法:
pythonwhile 条件表达式: 代码块 # 缩进 4 空格 (必须有修改条件的代码,否则无限循环)-
核心:条件表达式为
True时,重复执行代码块;为False时,退出循环 -
关键:代码块中必须包含修改条件的语句(如
num +=1),否则会无限循环 -
示例
python# 示例1:基础用法(循环 5 次) count = 0 while count < 5: print(f"循环次数:{count+1}") count += 1 # 修改条件(count 递增,最终不满足 count <5) # 示例2:计算 1-100 的和 sum_1_100 = 0 num = 1 while num <= 100: sum_1_100 += num num += 1 # 每次加 1,直到 num=101 退出 print("1-100 的和:", sum_1_100) # 输出 5050 # 示例3:无限循环(需手动控制退出) while True: user_input = input("请输入内容(输入 'q' 退出):") if user_input == "q": print("退出循环") break # 退出循环 print(f"你输入的是:{user_input}")
-
-
循环控制:break 和 continue(控制循环执行)
-
说明 :
break和continue用于改变循环的默认执行流程,仅作用于当前所在的循环层。 -
break:强制退出整个循环
-
作用:一旦执行
break,立即退出当前循环(后续代码不再执行,循环终止) -
适用场景:找到目标后提前退出循环(优化效率)
python# 示例1:for 循环中用 break fruits = ["苹果", "香蕉", "橙子", "葡萄"] target = "橙子" for fruit in fruits: if fruit == target: print(f"找到目标水果:{target}") break # 找到后立即退出循环,不再遍历后续元素 print(f"当前遍历:{fruit}") # 输出: # 当前遍历:苹果 # 当前遍历:香蕉 # 找到目标水果:橙子 # 示例2:while 循环中用 break num = 1 while num <= 10: if num == 5: print(f"找到数字 5,退出循环") break print(f"当前数字:{num}") num += 1 # 输出到 num=5 后退出
-
-
continue:跳过当前次循环,继续下一次
-
作用:执行
continue后,跳过当前循环的剩余代码,直接进入下一次循环 -
适用场景:需要跳过某些特定条件的循环
python# 示例1:for 循环中用 continue(跳过偶数) for num in range(1, 10): if num % 2 == 0: continue # 跳过偶数,不执行后续 print print(f"奇数:{num}") # 只输出奇数 1,3,5,7,9 # 示例2:while 循环中用 continue(跳过能被 3 整除的数) num = 0 while num < 10: num += 1 # 先递增(避免死循环) if num % 3 == 0: continue print(f"不被 3 整除的数:{num}") # 输出 1,2,4,5,7,8,10
-
-
嵌套循环中的 break/continue(仅作用于当前循环)
python# 示例:嵌套 for 循环(break 只退出内层循环) for i in range(1, 4): # 外层循环:1,2,3 print(f"\n外层循环 i={i}") for j in range(1, 4): # 内层循环:1,2,3 if j == 2: break # 退出内层循环,外层循环继续 print(f"内层循环 j={j}") # 输出: # 外层循环 i=1 # 内层循环 j=1 # 外层循环 i=2 # 内层循环 j=1 # 外层循环 i=3 # 内层循环 j=1 # 示例:嵌套 while 循环(continue 只跳过当前内层循环) i = 1 while i <= 3: print(f"\n外层循环 i={i}") j = 1 while j <= 3: j += 1 if j == 2: continue print(f"内层循环 j={j}") i += 1 -
循环 else 语句(循环正常结束时执行)
-
语法
bashfor 变量 in 可迭代对象: 代码块 else: else 代码块 # 循环正常结束(未被 break 中断)时执行 while 条件: 代码块 else: else 代码块 # 条件为 False 时执行(未被 break 中断) -
注意:如果循环被
break中断,else代码块不会执行python# 示例1:for 循环 else(正常结束) for num in range(1, 4): print(f"循环中:{num}") else: print("循环正常结束,执行 else 代码块") # 会执行 # 示例2:for 循环 else(被 break 中断) for num in range(1, 4): if num == 2: break print(f"循环中:{num}") else: print("循环正常结束") # 不会执行(被 break 中断) # 示例3:while 循环 else(用于判断循环是否正常结束) num = 1 while num <= 3: print(f"循环中:{num}") num += 1 else: print("while 循环正常结束") # 会执行
-
-
四、综合实战
-
用户登录验证(3 次重试机会)
python""" 功能:用户登录验证,支持 3 次重试 技术点:while 循环、if-elif-else、input()、break、格式化输出 """ max_try = 3 # 最大重试次数 try_count = 0 # 已尝试次数 while try_count < max_try: # 获取用户输入 username = input("请输入用户名:") password = input("请输入密码:") # 验证逻辑 if username == "admin" and password == "123456": print(f"登录成功!欢迎你,{username}!") break # 登录成功,退出循环 else: try_count += 1 remaining = max_try - try_count # 剩余次数 if remaining > 0: print(f"用户名或密码错误!剩余 {remaining} 次机会") else: print("3 次登录失败,账号已锁定,请 10 分钟后再试") -
猜数字游戏(1-100 猜数字,提示大小)
python""" 功能:猜数字游戏,系统随机生成 1-100 的数字,用户猜,提示大小 技术点:for 循环、if-elif-else、random 模块、格式化输出 """ import random # 系统生成 1-100 的随机数 target = random.randint(1, 100) print("欢迎参加猜数字游戏!系统已生成 1-100 的随机数,你有 10 次机会") # 最多猜 10 次 for guess_count in range(1, 11): try: guess = int(input(f"第 {guess_count} 次猜测,请输入数字:")) if guess < target: print("太小了!再试试更大的数字") elif guess > target: print("太大了!再试试更小的数字") else: # 猜对了,退出循环 print(f"恭喜你!第 {guess_count} 次猜对了!数字是 {target}") break except ValueError: print("输入错误!请输入 1-100 之间的整数") else: # 10 次都没猜对 print(f"游戏结束!你已用完 10 次机会,正确数字是 {target}") -
简易计算器(支持加减乘除)
python""" 功能:简易计算器,支持加减乘除,循环计算直到用户退出 技术点:while 循环、if-elif-else、input() 类型转换、异常处理 """ while True: print("\n===== 简易计算器 =====") print("支持操作:1.加法 2.减法 3.乘法 4.除法 5.退出") # 获取用户选择 choice = input("请输入操作编号(1-5):") if choice == "5": print("感谢使用,再见!") break # 验证操作编号 if choice not in ["1", "2", "3", "4"]: print("输入错误!请输入 1-5 之间的编号") continue # 获取两个数字 try: num1 = float(input("请输入第一个数字:")) num2 = float(input("请输入第二个数字:")) except ValueError: print("输入错误!请输入数字") continue # 执行计算 if choice == "1": result = num1 + num2 print(f"{num1} + {num2} = {result}") elif choice == "2": result = num1 - num2 print(f"{num1} - {num2} = {result}") elif choice == "3": result = num1 * num2 print(f"{num1} × {num2} = {result}") elif choice == "4": if num2 == 0: print("错误!除数不能为 0") else: result = num1 / num2 print(f"{num1} ÷ {num2} = {result:.2f}")
五、易错点总结
input()类型转换遗漏:忘记将输入转换为int/float,导致算术运算报错- 无限循环:
while循环中没有修改条件的代码,或条件永远为True - 缩进错误:循环 / 条件语句的代码块未缩进,或缩进不一致
break/continue作用范围:嵌套循环中,break只退出当前层循环,不影响外层- 格式化输出语法错误:f-string 遗漏
f开头,format()占位符与变量数量不匹配 - 循环
else误解:认为else是 "循环不执行时执行",实际是 "循环正常结束时执行"