Python学生成绩求平均值并且按照高低排序

本人刚学了字典部分的知识,然后遇到的这个代码编写需要结合字典和列表的知识,感觉没什么头绪(列表学到是学过),请问各位知道怎么做吗

img


# 输入5个学生的信息
scores = []
for _ in range(5):
    student = {}
    student["name"] = input("请输入学生姓名: ")
    student["english"] = int(input("请输入英语成绩: "))
    student["python"] = int(input("请输入Python成绩: "))
    student["math"] = int(input("请输入数学成绩: "))
    scores.append(student)

# 计算每位同学的平均成绩并添加到字典中
for student in scores:
    avg_score = (student["english"] + student["python"] + student["math"]) / 3
    student["avg"] = avg_score

# 按照平均成绩由高到低排序输出学生信息
sorted_scores = sorted(scores, key=lambda x: x["avg"], reverse=True)
for student in sorted_scores:
    print("姓名:", student["name"])
    print("英语成绩:", student["english"])
    print("Python成绩:", student["python"])
    print("数学成绩:", student["math"])
    print("平均成绩:", student["avg"])
    print()

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7798659
  • 这篇博客你也可以参考下:python 异常处理编程 编写程序,在完成上一题功能的基础上。要求考虑输入非法情况,如果输入的数不合法,要求让其重新输入,直至输入一个分数。
  • 你还可以看下python参考手册中的 python- 定义扩展类型:已分类主题- 终结和内存释放
  • 除此之外, 这篇博客: python基础学习之二进制如何进行加法运算中的 简单的递归调用,只有当进位完成或者无法进位才结束, 根据异或运算, 得出最后结果 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    **

    在这里插入图片描述

  • 您还可以看一下 关东升老师的Python数据分析实战篇:从数据搜集到数据可视化一步一步完成二手房价数据分析课程中的 数据分组和聚合小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    可以用Python编写一个程序,通过字典和列表的知识,求一组学生成绩的平均值,并将学生按照平均分高低进行排序。具体步骤如下:

    1. 创建一个字典,将学生的姓名和对应的成绩存储为键值对,例如:

    scores = {"小明": 90, "小红": 80, "小刚": 70}

    1. 创建一个空列表,将所有成绩存储在其中,例如:

    score_list = [90, 80, 70]

    1. 使用Python内置函数 sum() 对所有成绩进行求和,再使用 Python内置函数 len() 统计成绩的总人数,计算平均分,例如:

    total_score = sum(score_list) # 成绩总和 count = len(score_list) # 成绩总人数 average_score = total_score / count # 平均分

    1. 将学生按照平均分高低进行排序,可以使用 Python内置函数 sorted() 和 lambda表达式实现,例如:

    sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)

    其中 scores.items() 将字典转化为列表,然后按照字典的值进行排序, key=lambda x: x[1] 表示按照列表中的第二个元素排序, reverse=True 表示按照降序排列。

    1. 将平均分和排序后的学生信息输出,例如:

    print("平均分为:", average_score) print("按照平均分排序后的学生信息为:", sorted_scores)

    完整代码如下:

    scores = {"小明": 90, "小红": 80, "小刚": 70}
    score_list = []   # 存储所有成绩的列表
    for name, score in scores.items():
        score_list.append(score)
    
    total_score = sum(score_list)   # 成绩总和
    count = len(score_list)         # 成绩总人数
    average_score = total_score / count   # 平均分
    
    sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)  # 按照平均分排序后的学生信息
    
    print("平均分为:", average_score)
    print("按照平均分排序后的学生信息为:", sorted_scores)
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^