Python学生成绩求平均值并且按照高低排序输出怎么做

刚接触字典的内容,然后就遇到字典和列表联系的相关代码编写,感觉和上课讲的没什么关联,下不去手,所以请问有人会这个代码吗

img

  平均成绩其实可以在成绩录入时一并计算,写入学生成绩字典。但由于题目要求,我的代码是分步实施的。

  • 代码运行效果截屏图片

    img

  • 代码

#!/sur/bin/nve python
# coding: utf-8

green = '\033[32m'
nocolor = '\033[0m'

filds = 'name', 'english', 'python', 'math'
scores = [] # 学生成绩列表。

for i in range(5): # 录入五个学生成绩。
    name = input(f"\n{filds[0]}: ")

    score = []
    for fild in filds[1:]: # 循环录入学生三科成绩。
        score += [int(input(f"{fild}: "))]

    stu = [name] + score
    fild = 'name', 'english', 'python', 'math'
    
    scores.append(dict(zip(fild, stu))) # 生成学生成绩字典并追加到成绩列表scores 。

for i in range(len(scores)): # 遍历计算平均成绩。
    stu = scores[i]
    vag = (stu.get('english') + stu.get('english') + stu.get('english'))/3
    stu['vag'] = round(vag, 1)
    scores[i] = stu

scores.sort(reverse=True, key=lambda x: x.get('vag')) # 排序。

print(f"\n{'':~^50}\n{green}\n") # 输出颜色设置。

for stu in scores: # 成绩列表输出。
    blank = '\n' + ' '*18
    line = '~'*40
    print(f"{blank}name: {stu.get('name')}{blank}english: {stu.get('english')}{blank}python: {stu.get('python')}{blank}math: {stu.get('math')}{blank}vag: {stu.get('vag')}\n{line:^50}")

print(f"{nocolor}\n{'':~^50}\n") # 取消颜色设置。


学生成绩字典输出,也可以用字典视图

    for key, value in stu.items(): # 字典视图对象。
        print(' '*19, key, value)

  • 代码运行效果截屏图片

    img


# 定义一个字典,key为学生姓名,value为对应的成绩
scores = {"张三": 90, "李四": 85, "王五": 95, "赵六": 80}

# 计算成绩平均值
average_score = sum(scores.values()) / len(scores)

# 按照成绩高低排序
sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)

# 输出结果
print("平均成绩为:", average_score)
print("学生成绩从高到低为:")
for name, score in sorted_scores:
    print(name, ":", score)
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7696313
  • 你也可以参考下这篇文章:python 异常处理编程 编写程序,在完成上一题功能的基础上。要求考虑输入非法情况,如果输入的数不合法,要求让其重新输入,直至输入一个分数。
  • 同时,你还可以查看手册:python- 定义扩展类型:已分类主题- 终结和内存释放 中的内容
  • 除此之外, 这篇博客: Python——爬取小说网站的整本小说中的 一般情况下,这个链接是不完整的,需要进行一定的拼接(观察打印出的链接少哪一部分,然后使用字符串拼接的方式拼接一下即可)。(以防在向函数传数据的时候传不进去,可以先打印一下,检查是否获取了正确的名字和链接)。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
  • 您还可以看一下 林男老师的Python中小学儿童孩子青少年少儿编程入门零基础趣味创意视频教程课程中的 输入与显示小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    题解:

    本题需要求出学生成绩的平均值,并将结果按照从高到低排序输出。我们可以使用字典和列表来存储和处理数据。以下是具体的解决方案:

    1. 定义一个字典存储学生的姓名和对应的成绩,如下所示:
    student_scores = {
        '张三': 82,
        '李四': 92,
        '王五': 78,
        '赵六': 66,
        '钱七': 98,
    }
    
    1. 使用列表存储所有学生的成绩,便于后面求平均值,如下所示:
    scores = list(student_scores.values())
    
    1. 使用内置函数sum()求出成绩总和,再除以学生人数(即字典键值对数目)求得平均值,如下所示:
    avg_score = sum(scores) / len(student_scores)
    
    1. 使用列表的sort()方法对成绩从高到低排序,如下所示:
    scores_sorted = sorted(scores, reverse=True)
    
    1. 再次遍历字典,按成绩从高到低输出学生姓名和成绩,如下所示:
    for score in scores_sorted:
        for name, s in student_scores.items():
            if s == score:
                print(name, score)
    
    1. 将上面的所有代码整合到一个函数中,如下所示:
    def avg_score_and_sort():
        student_scores = {
            '张三': 82,
            '李四': 92,
            '王五': 78,
            '赵六': 66,
            '钱七': 98,
        }
        scores = list(student_scores.values())
        avg_score = sum(scores) / len(student_scores)
        scores_sorted = sorted(scores, reverse=True)
        for score in scores_sorted:
            for name, s in student_scores.items():
                if s == score:
                    print(name, score)
    
    1. 调用函数即可得到输出结果:
    avg_score_and_sort()
    # 输出结果为:
    # 钱七 98
    # 李四 92
    # 张三 82
    # 王五 78
    # 赵六 66
    

    综上所述,我们可以使用字典和列表结合的方式来实现求学生成绩平均值并按照高低排序输出。参考代码如下:


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