Python学生成绩排序(循环实现)

这篇具有很好参考价值的文章主要介绍了Python学生成绩排序(循环实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目要求(成绩数据已给出)

输入学生成绩信息序列,完成对于每个学生成绩数据的储存,并将所有学生储存于列表中;在此基础上,按照总分从高到低的学生名单,总分从低到高的学生名单,三门课成绩从高到低的学生名单 相同成绩都按先录入排列在前的规则处理。

成绩原始数据如下:

SanZhang 70 80 61
SiLi 86 77 81
WuWang 88 90 77
MingLi 60 77 81
MiWang 71 70 60
HaiLi 88 78 89
HeWang 70 90 80
LiWang 67 71 70


  • 解题思路(啰嗦的很,可直接看代码)
  1. 首先进行数据的输入,要求用字典储存学生信息,并将学生放入列表。因此,思路为:建立一个储存数据的列表data_list,并将字典作为列表的元素,每一个字典对应一个学生的信息,然后通过循环结构将输入的数据分别作为对应键的值。
  2. 建立数据列表后,通过调用列表中的字典,取出学生成绩进行运算比较。建立data_sum,list_tmp等成绩列表储存各个学生总成绩和单科成绩,对这些列表进行排序,然后利用列表进行学生的排序:循环遍历成绩列表中每一个数值,然后再在字典中遍历查找相同值,提取该值对应的字典的Name成员,放入新建的列表sort_list中;;循环结束即得到排序的名单(即sort_list)。
  3. 注意到成绩可能出现重复情况,而相同成绩都按先录入排列在前的规则处理,因此想到两种处理方式(分别在sort_sum和sort_sin中体现):

(1)利用pandas去除重复项,然后在字典中遍历找到相符值,得到值对应的键

(2)不去除重复元素,在遍历寻找相符值时,找到一个即进入下一次循环(continue)


代码如下

import pandas as pd
from pandas import DataFrame  # 用于删除求和时重复项
'''
对待重复成绩,本程序提供两种处理方式(在sort_sum和sort_sin中体现):
1.利用pandas去除重复项,然后在字典中遍历找到相符值,得到值对应的键
2.不去除重复元素,在遍历寻找相符值时,找到一个即进入下一次循环(continue)
'''


# 定义初始化数据函数
def input_data():
    data_list = list()  # 用字典储存每个学生数据,并将字典放入列表data_list中
    for i in range(8):
        data_list.append(dict())                        # 在列表中创建空字典
        title = ["Name", "Math", "English", "Physics"]  # 创建键列表用于字典键值对建立
        str_tmp = input()                               # 输入得到字符串str_tmp
        l_tmp = str_tmp.split(" ")                      # 将输入由字符串转为列表l_tmp
        data_list[i][title[0]] = l_tmp[0]               # 将名字作为键Name对应值
        j = 1
        while j < 4:                                    # 将成绩分别对应键放入
            data_list[i][title[j]] = int(l_tmp[j])
            j += 1
    return data_list    # 返回储存信息的(字典)列表


# 定义总成绩排序函数
def sort_sum(data_list):
    sort_list = list()   # 初始化排序输出列表
    data_sum = list()
    for i in range(8):
        ind_sum = 0      # 初始化每个人成绩总和
        title = ["Math", "English", "Physics"]
        for j in range(3):
            ind_sum += data_list[i][title[j]]
        data_sum.append(ind_sum)   # 得到总成绩列表
    data_sum = pd.DataFrame(data_sum)
    data_sum.drop_duplicates(subset=None, keep='first', inplace=True)    # 去除重复的总成绩,以免在字典中重复检索
    data_sum = list(data_sum[0])
    data_sum.sort()                # 将总成绩升序排列
    for i in range(len(data_sum)):
        for j in range(8):
            if data_sum[i] == data_list[j]["Math"] + data_list[j]["English"] + data_list[j]["Physics"]:
                sort_list.append(data_list[j]["Name"])
    print("总成绩排名(升序)为:", sort_list)
    sort_list.reverse()
    print("总成绩排名(降序)为:", sort_list)


# 定义单项成绩排列函数
def sort_sin(data_list):
    sort_math = list()
    sort_eng = list()
    sort_phy = list()
    list_tmp = list()   # 用于暂时存放各个学生各科成绩
    for i in range(8):  # 排列高数成绩
        list_tmp.append(data_list[i]["Math"])
    list_tmp.sort(reverse=True)
    for i in range(8):
        for j in range(8):
            if data_list[j]["Math"] == list_tmp[i] and data_list[j]["Name"] not in sort_math:
                sort_math.append(data_list[j]["Name"])
                continue
    list_tmp.clear()
    for i in range(8):  # 排列英语成绩
        list_tmp.append(data_list[i]["English"])
    list_tmp.sort(reverse=True)
    for i in range(8):
        for j in range(8):
            if data_list[j]["English"] == list_tmp[i] and data_list[j]["Name"] not in sort_eng:
                sort_eng.append(data_list[j]["Name"])
                continue
    list_tmp.clear()
    for i in range(8):  # 排列大物成绩
        list_tmp.append(data_list[i]["Physics"])
    list_tmp.sort(reverse=True)
    for i in range(8):
        for j in range(8):
            if data_list[j]["Physics"] == list_tmp[i] and data_list[j]["Name"]not in sort_phy:
                sort_phy.append(data_list[j]["Name"])
                continue
    print("高数成绩排名(降序)为: ", sort_math)
    print("英语成绩排名(降序)为: ", sort_eng)
    print("大物成绩排名(降序)为: ", sort_phy)


# 主函数调用
l = input_data()
print("----------第**次考试学生成绩情况明细----------")
print("学生名单:")
for i in range(8):
    print("(", i+1, ")", l[i]["Name"], sep='', end=' ')
print("\n详细成绩如下:")
for i in range(8):
    print(l[i])
print("成绩排名如下:")
sort_sum(l)
sort_sin(l)

注意注意注意!!!

运行时,如果输入数据格式不严格按照“数据(空格)数据(空格)…\n”,则程序无法正常运行。

原因:如果输入格式不对,则会导致“ ”或“”被列入字典的值,导致无法比较或out of index等问题。

所以,一定严格按照格式输入调试(就用题目所给数据,直接复制粘贴)

运行结果:

Python学生成绩排序(循环实现)文章来源地址https://www.toymoban.com/news/detail-472872.html

到了这里,关于Python学生成绩排序(循环实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用C语言进行学生成绩排序(交换排序算法)

    所谓交换,是指根据序列中两个元素的比较结果来对换这两个记录在序列中的位置。基于交换的排序算法很多,本文主要介绍冒泡排序和快速排序。 上一篇的博客学习了插入排序,今天这里是交换排序,它和插入排序都属于内部排序 冒泡排序的基本思想是:从后往前

    2024年02月15日
    浏览(28)
  • 用C语言进行学生成绩排序(插入排序算法)

    从今天开始我们就要开始学习排序算法啦! 排序,就是重新排列表中的元素,使表中的元素满足按有序的过程。为了查找方便,通常希望计算机中的表是按有序的。 除了我们之前了解的时间复杂度和空间复杂度来判断一个算法的好坏之外,在排序算法这里我们引

    2024年02月15日
    浏览(29)
  • 【Java】定义一个表示学生信息的类,要求如下:(1)学生的属性包括:学号、姓名、性别、年龄和课程成绩(5门课,其中包括Java);

    题目要求:定义一个表示学生信息的类,要求如下:(1)学生的属性包括:学号、姓名、性别、年龄和课程成绩(5门课,其中包括Java);(2)创建带参数的构造方法;(3)获取学生的属性信息;(4)根据学生类,创建五个该类的对象,要求对象数组,并打印五个学生的

    2024年02月07日
    浏览(31)
  • 用C语言对学生成绩进行排序(归并排序与基数排序)

    我们内部排序已经学了插入排序(直接插入排序、折半插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(简单选择排序、堆排序),这些都属于内部排序,接下来我们学习内部排序里面剩下的归并排序和基数排序。 归并排序与上述基于交换、选择等排序

    2024年02月16日
    浏览(26)
  • 基于Python+Django实现的学生成绩管理系统

    作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路  关注作者有好处 文末获取源码   语言环境:Python3.7 数据库:

    2024年02月11日
    浏览(30)
  • 查找和排序算法的学生成绩分析实验

    编写程序将自己学号后面的8位同学的学号、姓名以及数学、英语和数据结构的成绩信息保存到学生成绩表中。 学号 姓名 数学 英语 数据结构 189000202 张三 80 75 86 189000203 李四 55 63 72 189000204 王一 88 75 85 189000205 王二 79 96 83 189000206 王三 87 45 77 189000207 王四 66 56 50 189000208 王五

    2024年02月11日
    浏览(41)
  • 用C语言进行学生成绩排序(简单选择排序和堆排序)

    选择排序的基本思想是:每一趟(如第i趟)在后面n-i+1 (i=1,2…,n-1) 个待排序元素中选取最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,就不用再选了。选择排序中的堆排序算法是历年考查的重点。 根据上面选择排序的思想,可以很直观

    2024年02月15日
    浏览(25)
  • 学生成绩管理系统(合并文件,查找,总分排序,保存补考学生信息)

    目录 题目及要求: 录入学生成绩信息到链表中 合并文件 直接插入排序(总分降序) 冒泡排序(总分降序) 顺序查找(名字查找) 二分查找(名字查找)  这里是先按字母首字母排序再查找 保存不及格学生到文件中 现有学生成绩信息文件 1(1.txt),内容如下(同学自己补

    2024年02月10日
    浏览(31)
  • 用C语言进行学生成绩排序(简单选择排序和对堆排序)

    选择排序的基本思想是:每一趟(如第i趟)在后面n-i+1 (i=1,2…,n-1) 个待排序元素中选取最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,就不用再选了。选择排序中的堆排序算法是历年考查的重点。 根据上面选择排序的思想,可以很直观

    2024年02月13日
    浏览(35)
  • 成绩排序(思路+代码详解)Python实现

    目录 题目描述 输入 输出 样例输入 样例输出 题目分析:注意两点 思路分析: 代码详解: 给出n个学生的姓名和成绩,将学生成绩从高到低排序,成绩相同的学生,按照姓名拼音从小到大排序 输入包括多行,第一行是一个整数n(0n10),接下来有n行,每一行有学生姓名和两门课

    2024年02月12日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包