Python 学习笔记(第三期)------流程控制核心知识点自测与详解
本自测解析针对 Python 学习笔记系列第三期(流程控制:条件判断与循环结构)的核心内容。共 10 题,每题包含题目回顾、考查知识点、详细解答与分析,帮助读者巩固 Python 流程控制的核心技能。
文章索引:Python 学习笔记(第三期)------流程控制:条件判断与循环结构
更多自我检测系列欢迎浏览:每日知识点小问答
我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~
第三期:流程控制(第 1-5 题)
题目一:if-elif-else 的条件顺序与逻辑陷阱
题目:以下代码的输出是什么?请指出其中的逻辑错误并说明原因。
python
score = 95
if score >= 60:
print("合格")
elif score >= 90:
print("优秀")
elif score >= 75:
print("良好")
else:
print("不合格")
考查知识点
- 条件语句 ------ 第三期 §1.3
if-elif-else执行顺序
详细解答
输出结果:
text
合格
逻辑错误:
代码的条件顺序存在严重错误。当 score = 95 时:
- 首先判断
score >= 60,条件成立(95 >= 60) - 执行
print("合格"),然后跳过 所有后续的elif和else分支 - 后面的
score >= 90(优秀)和score >= 75(良好)永远不会被判断
修正方案:
将条件从最严格到最宽松排列:
python
score = 95
if score >= 90:
print("优秀") # 先判断最高标准
elif score >= 75:
print("良好") # 再判断中等标准
elif score >= 60:
print("合格") # 再判断及格标准
else:
print("不合格") # 最后兜底
运行结果:
text
优秀
关键原则:
在 if-elif-else 结构中,条件的书写顺序直接影响结果------范围更小、更严格的条件必须放在前面,否则会被更宽松的条件"截胡"。
题目二:条件嵌套与闰年判断
题目:请写出判断某年某月有多少天的程序。要求:用户输入年份和月份,程序输出该月的天数(需正确处理闰年2月的情况)。闰年的判断条件是:能被400整除,或者能被4整除但不能被100整除。
考查知识点
- 条件嵌套 ------ 第三期 §1.4
- 闰年判断逻辑
详细解答
python
year = int(input("请输入年份:"))
month = int(input("请输入月份:"))
if month in [1, 3, 5, 7, 8, 10, 12]:
print(f"{year}年{month}月有31天")
elif month in [4, 6, 9, 11]:
print(f"{year}年{month}月有30天")
elif month == 2:
# 闰年判断(嵌套条件)
if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
print(f"{year}年{month}月有29天")
else:
print(f"{year}年{month}月有28天")
else:
print("输入的月份无效")
运行示例:
text
请输入年份:2024
请输入月份:2
2024年2月有29天
闰年判断逻辑拆解:
| 条件 | 含义 |
|---|---|
year % 400 == 0 |
能被400整除 → 闰年(如2000年) |
year % 4 == 0 and year % 100 != 0 |
能被4整除但不能被100整除 → 闰年(如2024年) |
| 以上均不满足 | 平年(如1900年,能被100整除但不能被400整除) |
执行流程图:
text
输入年份和月份
↓
月份在大月列表 → 31天
↓ 否
月份在小月列表 → 30天
↓ 否
月份是2月 → 判断是否闰年 → 29天/28天
↓ 否
月份无效 → 提示错误
题目三:while 循环与累加求和
题目:以下代码的功能是计算 1 到 10 的累加和,但存在一处严重错误,请指出并修正。
python
i = 1
total = 0
while i <= 10:
total += i
print(f"1到10的和为:{total}")
考查知识点
while循环 ------ 第三期 §2.1- 循环变量更新
详细解答
错误 :循环变量 i 没有更新,导致 i 永远为 1,条件 i <= 10 永远为 True,形成无限循环(死循环)。
修正:
python
i = 1
total = 0
while i <= 10:
total += i
i += 1 # 添加循环变量更新
print(f"1到10的和为:{total}")
运行结果:
text
1到10的和为:55
执行过程追踪:
| 循环次数 | 进入前 i | 条件 i <= 10 |
total(累加后) | i(更新后) |
|---|---|---|---|---|
| 第1次 | 1 | True | 1 | 2 |
| 第2次 | 2 | True | 3 | 3 |
| 第3次 | 3 | True | 6 | 4 |
| ... | ... | ... | ... | ... |
| 第10次 | 10 | True | 55 | 11 |
| 第11次 | 11 | False | 退出循环 | - |
⚠️ 防止死循环的三要素:
- 初始化 :循环变量赋初值(
i = 1) - 条件判断 :设置合理的退出条件(
i <= 10) - 变量更新 :在循环体内改变变量值,使其向退出条件靠近(
i += 1)
题目四:for 循环与 range() 的灵活使用
题目 :请写出使用 for 循环和 range() 生成以下序列的代码,并说明 range(start, stop, step) 三个参数的含义。
- 序列 A:0, 1, 2, 3, 4, 5
- 序列 B:2, 4, 6, 8, 10
- 序列 C:10, 8, 6, 4, 2
- 序列 D:计算 1 到 100 中所有奇数的和
考查知识点
for循环 ------ 第三期 §2.2range()函数 ------ 第三期 §2.3
详细解答
range(start, stop, step) 参数说明:
| 参数 | 含义 | 是否必须 | 默认值 |
|---|---|---|---|
start |
序列的起始值(包含) | 否 | 0 |
stop |
序列的结束值(不包含) | 是 | 无 |
step |
步长(每次递增的值) | 否 | 1 |
⚠️ 关键 :
range()生成的序列不包含stop值 。例如range(5)生成 0~4,不包含 5。
序列生成代码:
python
# 序列 A:0, 1, 2, 3, 4, 5
for i in range(6): # 或 range(0, 6)
print(i, end=" ")
print()
# 序列 B:2, 4, 6, 8, 10
for i in range(2, 11, 2):
print(i, end=" ")
print()
# 序列 C:10, 8, 6, 4, 2
for i in range(10, 1, -2):
print(i, end=" ")
print()
# 序列 D:1 到 100 中所有奇数的和
total = 0
for i in range(1, 101, 2):
total += i
print(f"1到100中所有奇数的和为:{total}")
运行结果:
text
0 1 2 3 4 5
2 4 6 8 10
10 8 6 4 2
1到100中所有奇数的和为:2500
题目五:循环嵌套------打印九九乘法表
题目 :使用 for 循环嵌套打印九九乘法表,要求输出格式整齐对齐。
考查知识点
- 循环嵌套 ------ 第三期 §3.2
- 制表符
\t对齐
详细解答
python
for i in range(1, 10): # 外层循环:被乘数(行),1~9
for j in range(1, i + 1): # 内层循环:乘数(列),1~i
print(f"{j} × {i} = {i * j}", end="\t")
print() # 每行结束后换行
运行结果:
text
1 × 1 = 1
1 × 2 = 2 2 × 2 = 4
1 × 3 = 3 2 × 3 = 6 3 × 3 = 9
1 × 4 = 4 2 × 4 = 8 3 × 4 = 12 4 × 4 = 16
1 × 5 = 5 2 × 5 = 10 3 × 5 = 15 4 × 5 = 20 5 × 5 = 25
1 × 6 = 6 2 × 6 = 12 3 × 6 = 18 4 × 6 = 24 5 × 6 = 30 6 × 6 = 36
1 × 7 = 7 2 × 7 = 14 3 × 7 = 21 4 × 7 = 28 5 × 7 = 35 6 × 7 = 42 7 × 7 = 49
1 × 8 = 8 2 × 8 = 16 3 × 8 = 24 4 × 8 = 32 5 × 8 = 40 6 × 8 = 48 7 × 8 = 56 8 × 8 = 64
1 × 9 = 9 2 × 9 = 18 3 × 9 = 27 4 × 9 = 36 5 × 9 = 45 6 × 9 = 54 7 × 9 = 63 8 × 9 = 72 9 × 9 = 81
执行流程解析:
text
外层 i=1 → 内层 j 从1到1 → 打印 "1×1=1" → 换行
外层 i=2 → 内层 j 从1到2 → 打印 "1×2=2" "2×2=4" → 换行
外层 i=3 → 内层 j 从1到3 → 打印 "1×3=3" "2×3=6" "3×3=9" → 换行
...
关键点 :外层循环每执行一次,内层循环完整执行一轮 。
end="\t"使用制表符对齐列,print()换行。
第三期:流程控制(第 6-10 题)
题目六:break 与 continue 的区别
题目 :请写出以下两段代码的输出,并解释 break 和 continue 的区别。
python
# 代码段一(break)
print("=== break 示例 ===")
for i in range(5):
if i == 3:
break
print(i)
# 代码段二(continue)
print("=== continue 示例 ===")
for i in range(5):
if i == 3:
continue
print(i)
考查知识点
break语句 ------ 第三期 §4.1continue语句 ------ 第三期 §4.2
详细解答
代码输出:
text
=== break 示例 ===
0
1
2
=== continue 示例 ===
0
1
2
4
break 与 continue 对比:
| 对比维度 | break |
continue |
|---|---|---|
| 作用 | 终止整个循环,跳出循环体 | 跳过本次循环剩余代码,进入下一次循环 |
| 循环是否继续 | ❌ 不再继续 | ✅ 继续下一次循环 |
| 适用场景 | 提前找到目标后退出(如查找元素) | 某些条件不满足时跳过处理(如过滤数据) |
| 代码段一执行过程 | i=0→输出0,i=1→输出1,i=2→输出2,i=3→break终止 | - |
| 代码段二执行过程 | i=0→输出0,i=1→输出1,i=2→输出2,i=3→continue跳过,i=4→输出4 | - |
执行流程示意图:
text
break:
┌─────────────────────────────────────┐
│ i=0 → print(0) │
│ i=1 → print(1) │
│ i=2 → print(2) │
│ i=3 → break ────────► 循环终止 │
│ i=4 → (不执行) │
└─────────────────────────────────────┘
continue:
┌─────────────────────────────────────┐
│ i=0 → print(0) │
│ i=1 → print(1) │
│ i=2 → print(2) │
│ i=3 → continue ──┐ │
│ i=4 → print(4) │ 跳过本次循环 │
└────────────────────┘ │
◄──────────────────┘
题目七:while...else 结构的执行逻辑
题目 :请写出以下两段代码的输出,并解释 while...else 中 else 子句的执行条件。
python
# 代码段一
print("=== 代码段一 ===")
i = 0
while i < 5:
if i == 3:
break
print(i)
i += 1
else:
print("循环正常结束")
# 代码段二
print("=== 代码段二 ===")
i = 0
while i < 5:
if i == 3:
i += 1
continue
print(i)
i += 1
else:
print("循环正常结束")
考查知识点
while...else------ 第三期 §2.1break对else的影响 ------ 第三期 §4.1
详细解答
代码输出:
text
=== 代码段一 ===
0
1
2
=== 代码段二 ===
0
1
2
4
循环正常结束
while...else 的 else 执行条件:
else子句在循环正常结束 (即条件变为False)时执行- 如果循环被
break打断,else子句不会执行
代码段一分析:
| 循环次数 | i 值 | 条件 i < 5 |
执行情况 |
|---|---|---|---|
| 第1次 | 0 | True | 输出0,i变为1 |
| 第2次 | 1 | True | 输出1,i变为2 |
| 第3次 | 2 | True | 输出2,i变为3 |
| 第4次 | 3 | True | i == 3 → break,循环被终止 |
- 循环被
break打断 →else不执行 - 输出:0, 1, 2
代码段二分析:
| 循环次数 | i 值 | 条件 i < 5 |
执行情况 |
|---|---|---|---|
| 第1次 | 0 | True | 输出0,i变为1 |
| 第2次 | 1 | True | 输出1,i变为2 |
| 第3次 | 2 | True | 输出2,i变为3 |
| 第4次 | 3 | True | i == 3 → continue(跳过本次),i变为4 |
| 第5次 | 4 | True | 输出4,i变为5 |
| 第6次 | 5 | False | 循环正常结束 |
- 循环未被
break打断 →else执行 - 输出:0, 1, 2, 4, 循环正常结束
💡 实战场景 :
while...else常用于在循环中查找元素------如果找到了(break),不执行else;如果遍历完都没找到(循环正常结束),执行else中的"未找到"逻辑。
题目八:猜数字游戏(综合应用)
题目:请补全以下猜数字游戏的代码,使其实现以下功能:
- 程序生成一个 1~100 的随机整数
- 用户有 5 次机会猜测
- 每次猜测后提示"猜大了"或"猜小了"
- 猜中则提前结束并提示胜利
- 5 次均未猜中则提示正确答案
python
import random
secret = random.randint(1, 100)
max_attempts = 5
attempts = 0
print("猜数字游戏!猜一个 1~100 之间的数字")
while ________: # 补全循环条件
guess = int(input("请输入你猜的数字:"))
attempts += 1
if guess == secret:
print(f"🎉 恭喜!{attempts}次猜中!")
________ # 补全提前退出语句
elif guess > secret:
print("📈 猜大了")
else:
print("📉 猜小了")
else:
print(f"😢 正确答案是:{secret}")
考查知识点
while循环与条件控制 ------ 第三期 §2.1break与while...else------ 第三期 §4.1
详细解答
补全后的代码:
python
import random
secret = random.randint(1, 100)
max_attempts = 5
attempts = 0
print("猜数字游戏!猜一个 1~100 之间的数字")
while attempts < max_attempts: # 补全循环条件
guess = int(input("请输入你猜的数字:"))
attempts += 1
if guess == secret:
print(f"🎉 恭喜!{attempts}次猜中!")
break # 补全提前退出语句
elif guess > secret:
print("📈 猜大了")
else:
print("📉 猜小了")
else:
print(f"😢 正确答案是:{secret}")
运行示例:
text
猜数字游戏!猜一个 1~100 之间的数字
请输入你猜的数字:50
📈 猜大了
请输入你猜的数字:25
📉 猜小了
请输入你猜的数字:37
🎉 恭喜!3次猜中!
核心逻辑分析:
| 情况 | 执行路径 |
|---|---|
| 猜中 | guess == secret → 输出恭喜 → break → 跳出循环 → else 不执行 |
| 未猜中且还有机会 | 提示"猜大了"或"猜小了" → 继续循环 |
| 5次均未猜中 | 循环正常结束(条件变为 False)→ else 执行 → 输出正确答案 |
题目九:输入校验与类型转换
题目:以下代码存在一个严重缺陷------如果用户输入非数字内容,程序会崩溃。请修复此代码,使其能够正确处理非数字输入。
python
score = int(input("请输入成绩:"))
if score >= 90:
print("优秀")
elif score >= 75:
print("良好")
elif score >= 60:
print("合格")
else:
print("不合格")
考查知识点
- 输入校验 ------ 第三期 §5
isdigit()方法 ------ 第三期 §5
详细解答
缺陷 :int(input()) 在用户输入非数字(如字母、特殊字符)时会抛出 ValueError 异常。
修复方案 (使用 isdigit() 校验):
python
score_input = input("请输入成绩:")
# 判断输入是否为有效数字
if score_input.isdigit():
score = int(score_input)
if score >= 90:
print("优秀")
elif score >= 75:
print("良好")
elif score >= 60:
print("合格")
else:
print("不合格")
else:
print("❌ 输入无效,请输入数字!")
运行示例:
text
请输入成绩:abc
❌ 输入无效,请输入数字!
进阶版(循环询问直到输入合法):
python
while True:
score_input = input("请输入成绩:")
if score_input.isdigit():
score = int(score_input)
break
print("❌ 输入无效,请输入数字!")
# 后续判断逻辑...
isdigit() 扩展对比:
| 方法 | 说明 | "123" |
"12.3" |
"①②" |
|---|---|---|---|---|
isdigit() |
是否只包含数字字符 | ✅ True | ❌ False | ✅ True |
isdecimal() |
是否只包含十进制数字(最严格) | ✅ True | ❌ False | ❌ False |
isnumeric() |
是否只包含数字字符(范围最广) | ✅ True | ❌ False | ✅ True |
题目十:综合实战------房贷计算器
题目:房贷计算器的核心公式如下:
- 月利率 = 年利率 / 12
- 还款月数 = 贷款期限 × 12
- 每月月供 = 贷款金额 × 月利率 × (1 + 月利率)^还款月数 / (1 + 月利率)\^还款月数 - 1
- 还款总额 = 每月月供 × 还款月数
- 支付利息 = 还款总额 - 贷款金额
请补全以下代码,实现房贷计算器的核心计算逻辑。
python
# 获取用户输入
loan_amount = float(input("请输入贷款金额(万元):")) * 10000 # 转为元
years = int(input("请输入贷款期限(年):"))
rate = float(input("请输入年利率(%,如 4.9):")) / 100
# 计算月利率和还款月数
monthly_rate = ________ # 补全
total_months = ________ # 补全
# 计算每月月供(等额本息)
if monthly_rate == 0:
monthly_payment = loan_amount / total_months
else:
monthly_payment = loan_amount * monthly_rate * (1 + monthly_rate) ** total_months / (((1 + monthly_rate) ** total_months) - 1)
# 计算总额
total_payment = ________ # 补全
total_interest = ________ # 补全
# 输出结果
print(f"每月月供:{monthly_payment:.2f} 元")
print(f"还款总额:{total_payment:.2f} 元")
print(f"支付利息:{total_interest:.2f} 元")
考查知识点
- 算术运算符与幂运算 ------ 第二期 §1
- 变量赋值与基本运算 ------ 第一期 §5
- 综合公式实现
详细解答
补全后的代码:
python
# 获取用户输入
loan_amount = float(input("请输入贷款金额(万元):")) * 10000 # 转为元
years = int(input("请输入贷款期限(年):"))
rate = float(input("请输入年利率(%,如 4.9):")) / 100
# 计算月利率和还款月数
monthly_rate = rate / 12 # 补全:月利率 = 年利率 / 12
total_months = years * 12 # 补全:还款月数 = 年限 × 12
# 计算每月月供(等额本息)
if monthly_rate == 0:
monthly_payment = loan_amount / total_months
else:
monthly_payment = loan_amount * monthly_rate * (1 + monthly_rate) ** total_months / (((1 + monthly_rate) ** total_months) - 1)
# 计算总额
total_payment = monthly_payment * total_months # 补全:还款总额 = 月供 × 月数
total_interest = total_payment - loan_amount # 补全:支付利息 = 总额 - 本金
# 输出结果
print(f"每月月供:{monthly_payment:.2f} 元")
print(f"还款总额:{total_payment:.2f} 元")
print(f"支付利息:{total_interest:.2f} 元")
运行示例(100万元,30年,年利率4.9%):
text
请输入贷款金额(万元):100
请输入贷款期限(年):30
请输入年利率(%,如 4.9):4.9
每月月供:5307.27 元
还款总额:1910616.19 元
支付利息:910616.19 元
公式拆解:
| 变量 | 计算方式 | 示例值 |
|---|---|---|
monthly_rate |
rate / 12 |
4.9% / 12 = 0.4083% |
total_months |
years * 12 |
30 * 12 = 360 |
monthly_payment |
本金 × 月利率 × (1+月利率)^月数 / ((1+月利率)^月数 - 1) |
5307.27 |
total_payment |
monthly_payment × total_months |
5307.27 × 360 = 1910616.19 |
total_interest |
total_payment - loan_amount |
1910616.19 - 1000000 = 910616.19 |
附:知识点对应总表
| 题号 | 主要考查知识点(对应笔记章节) |
|---|---|
| 1 | 第三期 §1.3 if-elif-else 条件顺序 |
| 2 | 第三期 §1.4 条件嵌套与闰年判断 |
| 3 | 第三期 §2.1 while 循环与变量更新 |
| 4 | 第三期 §2.2、§2.3 for 循环与 range() |
| 5 | 第三期 §3.2 循环嵌套与九九乘法表 |
| 6 | 第三期 §4.1、§4.2 break 与 continue 对比 |
| 7 | 第三期 §2.1 while...else 执行逻辑 |
| 8 | 第三期 §2.1、§4.1 猜数字综合应用 |
| 9 | 第三期 §5 输入校验与 isdigit() |
| 10 | 第二期 §1 算术运算;第一期 §5 变量赋值 |
学习建议:对于答错的题目,请回看第三期对应章节,并动手在 Python 交互式环境中执行相关命令。流程控制是编程逻辑的核心,建议通过实际编写条件判断和循环代码加深理解。
--- Compiled and Authored by Whisky --- July 12 th, 2026