任务要求
任务描述
假设你正在为一个学校编写一个成绩管理小程序。用户将输入一系列学生的姓名和成绩,用逗号分隔。你需要将这些数据存储在列表中。接着,程序应该计算并输出平均分、最高分和最低分的学生姓名。如果有多个学生的成绩相同,输出他们的姓名,用逗号分隔。
测试例子说明
平台会对你编写的代码进行测试:
测试输入:Alice,85;Bob,90;Charlie,85;David,78; 预期输出: 平均分: 84.5 最高分: Bob 最低分: David
相关知识
你需要掌握:如何使用Python的数据结构、列表、循环、if-else语句。
输入异常检查
如果输入的用逗号分隔的数据包含最后一个空格,可以用以下语句检查:
for student_data in data:
if ',' not in student_data: # 检查输入是否包含逗号
continue
最终代码
# 初始化列表
students_scores = [ ]
# 循环读入用户输入的学生数据
data = input().split(';')
#检查输入是否包含了逗号# hint: too much value to unpacked 是因为最后一个用;的空格也被读进来了
for student_data in data:
if ',' not in student_data:
continue
name, score = student_data.split(',')
students_scores.append((name, int(score)))
#计算平均分
average_score = sum([score for _, score in students_scores]) / len(students_scores)
#查找最高分和最低分对应学生
max_score = max(students_scores, key=lambda x: x[1])[1]
min_score = min(students_scores, key=lambda x: x[1])[1]
#定义最高最低分对应学生名
max_score_students = [name for name, score in students_scores if score == max_score]
min_score_students = [name for name, score in students_scores if score == min_score]
########end of your code 输出结果#########
print(f"平均分: {average_score}")
print(f"最高分: {','.join(max_score_students)}")
print(f"最低分: {','.join(min_score_students)}")