Python 学习笔记(第三期)——流程控制核心知识点自测与详解

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 时:

  1. 首先判断 score >= 60,条件成立(95 >= 60)
  2. 执行 print("合格"),然后跳过 所有后续的 elifelse 分支
  3. 后面的 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 退出循环 -

⚠️ 防止死循环的三要素

  1. 初始化 :循环变量赋初值(i = 1
  2. 条件判断 :设置合理的退出条件(i <= 10
  3. 变量更新 :在循环体内改变变量值,使其向退出条件靠近(i += 1

题目四:for 循环与 range() 的灵活使用

题目 :请写出使用 for 循环和 range() 生成以下序列的代码,并说明 range(start, stop, step) 三个参数的含义。

  1. 序列 A:0, 1, 2, 3, 4, 5
  2. 序列 B:2, 4, 6, 8, 10
  3. 序列 C:10, 8, 6, 4, 2
  4. 序列 D:计算 1 到 100 中所有奇数的和
考查知识点
  • for 循环 ------ 第三期 §2.2
  • range() 函数 ------ 第三期 §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 题)

题目六:breakcontinue 的区别

题目 :请写出以下两段代码的输出,并解释 breakcontinue 的区别。

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.1
  • continue 语句 ------ 第三期 §4.2
详细解答

代码输出

text 复制代码
=== break 示例 ===
0
1
2
=== continue 示例 ===
0
1
2
4

breakcontinue 对比

对比维度 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...elseelse 子句的执行条件。

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.1
  • breakelse 的影响 ------ 第三期 §4.1
详细解答

代码输出

text 复制代码
=== 代码段一 ===
0
1
2
=== 代码段二 ===
0
1
2
4
循环正常结束

while...elseelse 执行条件

  • 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 == 3break循环被终止
  • 循环被 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 == 3continue(跳过本次),i变为4
第5次 4 True 输出4,i变为5
第6次 5 False 循环正常结束
  • 循环未被 break 打断 → else 执行
  • 输出:0, 1, 2, 4, 循环正常结束

💡 实战场景while...else 常用于在循环中查找元素------如果找到了(break),不执行 else;如果遍历完都没找到(循环正常结束),执行 else 中的"未找到"逻辑。

题目八:猜数字游戏(综合应用)

题目:请补全以下猜数字游戏的代码,使其实现以下功能:

  1. 程序生成一个 1~100 的随机整数
  2. 用户有 5 次机会猜测
  3. 每次猜测后提示"猜大了"或"猜小了"
  4. 猜中则提前结束并提示胜利
  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.1
  • breakwhile...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 breakcontinue 对比
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

相关推荐
tyqtyq221 小时前
药品说明书解读 —— AI 安全用药助手,鸿蒙原生应用深度解析
人工智能·学习·华为·生活·harmonyos
小心亦新2 小时前
STM32学习13 定时器1中断
stm32·嵌入式硬件·学习
逆向编程2 小时前
Socket异常连接自动清理方案
开发语言
花花无缺2 小时前
Windows 定时执行 Python 脚本方案
python·操作系统·命令行
我命由我123452 小时前
72 法则极简理解
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
阿里云云原生3 小时前
AgenticOps 已来:运维智能体如何落进生产环境
云原生
qq_263_tohua3 小时前
第112期 CNN学习,不错的文章
学习
va学弟3 小时前
Java 网络通信编程(10):Channel 和 Selector
java·开发语言
爱吃提升3 小时前
MATLAB impulse函数脉冲响应完整实操教程
开发语言·matlab