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

相关推荐
j7~13 分钟前
【Linux】二十六.线程篇三《Linux多线程编程:线程控制、线程ID以及进程地址空间分布、线程局部存储__thread以及clone系统调用》---详解
linux·运维·服务器·开发语言·c++·多线程编辑·线程的控制
知识分享小能手2 小时前
高等数学学习教程,从入门到精通,定积分 — 知识点全面总结(10)
学习·机器学习·概率论
维吉斯蔡8 小时前
【VS Code / Cursor】文件夹右键快捷打开与文件类型自动关联
开发语言·程序人生·学习方法
一米阳光86618 小时前
软考(中级)软件设计师核心笔记(3)数据库系统——概念、数据库设计
数据库·笔记·职场发展·软考·软件设计师
幻影123!8 小时前
从零训练一个会下五子棋的AI
python·深度学习·神经网络·强化学习·五子棋·alpha zero·mokugo
漏刻有时8 小时前
PHP GeoJSON转PNG地图渲染程序开发笔记、源码解读、问题复盘与整改方案
android·笔记·php
暗影凋落9 小时前
CMake构建学习笔记-SQLite库的构建
笔记·学习·sqlite
Python私教9 小时前
Django 接入 AI 大模型实战:从零做一个流式聊天网站
人工智能·python·django
Python私教9 小时前
Django 接入 MCP 实战:让 AI 安全调用数据库和业务接口
人工智能·python·django
Python私教9 小时前
Django 搭建 AI 本地知识库:文档上传、向量检索与智能问答
人工智能·python·django