You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数实现测试分数等级与平均分的代码问题求助

问题与代码修正

作业要求:用Python函数实现输入5个测试分数,计算并显示每个分数对应的字母等级,以及分数的平均分。

原代码存在的问题

  • 缩进错误:main函数内的return语句缩进不正确,后续调用determine_grade和calc_average的代码不在main函数作用域内,导致变量无法访问。
  • 平均分计算逻辑错误:除法运算优先级高于加法,原代码仅对最后一个分数做除法,正确写法应先将所有分数求和再除以5。
  • 等级判断逻辑错误:原代码试图同时判断所有分数的范围,但90 <= s1, s2, s3, s4, s5 <= 100这种写法是创建元组,无法实现正确的范围判断;且需求应为每个分数对应单独的字母等级,而非所有分数统一等级。
  • 变量作用域问题:原代码在main函数外部直接使用s1-s5变量,这些变量属于main函数内部变量,外部无法访问。

修正后的代码

def calc_average(scores):
    # 先求和再除以数量,避免优先级问题
    return sum(scores) / len(scores)

def determine_grade(score):
    # 单个分数的等级判断逻辑
    if 90 <= score <= 100:
        return "A"
    elif 80 <= score <= 89:
        return "B"
    elif 70 <= score <= 79:
        return "C"
    elif 60 <= score <= 69:
        return "D"
    elif score < 60:
        return "F"
    else:
        return "无效分数"

def main():
    # 输入5个分数,存入列表更简洁
    scores = []
    for i in range(5):
        score = int(input(f'Enter score {i+1}: '))
        scores.append(score)
    
    # 显示每个分数对应的等级
    print("各分数对应的字母等级:")
    for idx, score in enumerate(scores, 1):
        grade = determine_grade(score)
        print(f"分数{idx}:{score} → {grade}")
    
    # 计算并显示平均分
    average = calc_average(scores)
    print(f"\n分数平均分:{average:.2f}")

main()

代码说明

  • 使用列表存储分数,比单独变量更简洁易维护。
  • calc_average函数接收分数列表,用sum()求和、len()获取数量,计算平均分更通用。
  • determine_grade函数接收单个分数,实现正确的范围判断,返回对应等级。
  • main函数内完成输入、调用其他函数、结果输出,确保变量作用域正确。

内容的提问来源于stack exchange,提问作者kman12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:35:29