Python · Day 16

第二次阶段复习
与测验

第十六天,我没有学习新语法,而是复习第 9~15 天的字典、函数、条件、循环、列表、返回值和边界保护,通过四部分测验检查自己能否真正组合并解释这些知识。

本次测验成绩

  • 基础概念:18 / 20
  • 执行过程与输出:14 / 20
  • 找错与订正:21 / 25
  • 综合编程:35 / 35
  • 原始总成绩:88 / 100

第一次阶段测验是 81 分,这次提高到 88 分。最明显的进步是综合编程:已经能独立组织接近五十行的完整程序,而不只是完成单独的语法练习。

基础概念:数据如何进入和离开函数

我能正确区分函数定义与调用、print()return,也知道 for key, value in student.items() 中两个循环变量分别接收键和值。

这一部分的失分来自变量作用描述不够准确。在 result = calculate_average(student_scores) 中,student_scores 保存并传入的是成绩列表,而不是整数;形参 scores 在函数内部接住列表,外部变量 result 再接住返回值。

只说“传入数据、进行运算、取得结果”还不够。以后要继续说清楚:传入的具体是什么、哪个形参接收、最后返回的具体值和类型是什么。

执行输出:return 会立刻结束函数

执行过程部分的主要错误,是把循环内部提前返回的程序误判成“输出列表”。实际上第一轮中 score 得到 80,total 变成 80,随后 return total 立即结束函数,因此最终输出整数 80。

订正题
def calculate_total(scores):                 # 定义总分函数
    total = 0                                   # 总分从0开始
    for score in scores:                      # 第一轮score得到80
        total = total + score                  # total变成80
        return total                          # 立即返回80并结束函数

另一处失分是把准确输出写成 80。普通除法 / 返回浮点数,所以 calculate_average([70, 80, 90]) 的结果应写成 80.0

找错订正:保护应写进函数内部

找错部分能够发现输入字符串需要 int()、字典键 subjectsubjects 不同、无效输入的 append() 应放进 else,也能调整函数定义和调用顺序。

空列表题最初提出“给列表加几个数据”,这样只能避开某一次错误,不能保证函数安全。完整修正应放在函数内部:

订正题
def calculate_average(scores):               # 定义平均分函数
    if len(scores) == 0:                      # 先检查列表是否为空
        return 0                               # 空列表直接返回,避免除以0
    total = calculate_total(scores)              # 非空时再计算总分
    return total / len(scores)                  # 返回浮点数平均分

综合编程:三天学习时间分析器

最后一部分要求独立完成一个不同主题的综合程序:收集三天有效学习时间,计算总分钟数和平均分钟数,根据平均数给出建议,再返回字典报告。

review_test2.py
def input_minutes(count):                      # count决定有效数据数量
    minutes = []                                  # 创建空列表
    while len(minutes) < count:                   # 数量不足时继续输入
        minute = int(input("请输入分钟数: "))   # 输入并转换为整数
        if minute < 0 or minute > 300:          # 检查0~300范围
            print("请输入0-300之间的分钟数")     # 无效数据不加入列表
        else:                                      # 有效数据进入这里
            minutes.append(minute)                 # 保存当前分钟数
            print("已录入分钟数:", minute)       # 显示成功结果
    return minutes                               # 返回三项有效数据
review_test2.py
def create_report(minutes_list):                  # 定义总管函数
    total = calculate_total(minutes_list)           # 得到总分钟数
    average = calculate_average(minutes_list)       # 得到平均分钟数
    advice = get_advice(average)                    # 根据平均数得到建议
    report = {"total": total, "average": average,
              "advice": advice}                   # 组成字典报告
    return report                                 # 返回完整报告

测试时先输入 -20,范围判断成功拦截它;随后输入 60、45、30,最终得到列表 [60, 45, 30]、总分钟数 135、平均分钟数 45.0 和建议“保持进度”。这一部分全部功能正确,获得 35 / 35。

最后订正

测验结束前,再次回答了三个薄弱点:循环内部的 return 会在第一轮返回 80;空列表除法需要在函数内部提前返回;平均分结果是浮点数 80.0。三题均订正正确。

下一阶段继续巩固

  • 描述变量时说出当前保存的具体值,而不只说数据用途
  • 看到普通除法时检查结果是否为浮点数
  • 检查 return 的缩进和函数结束位置
  • 把空列表、错误范围等保护写进函数内部
  • 继续沿函数调用路线追踪直接调用和间接调用

原始成绩 88 分记录的是第一次作答结果,订正不会覆盖它。保留失分和修正过程,才能看见真正需要继续训练的地方。