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
相关产品推荐
相关产品推荐

