python100题(11.学生成绩排序 12.读取文件排序)

       哈啰,欢迎大家收看我的频道。前几天回了一趟老家,没有电脑所以没有更新。那么我们今天接着来讲python编程100题。话不多说,我们直接看题。

11.学生成绩排序

       学生成绩数据格式
复杂列表,元素是字典或者元组

[

{"学号": 1, "姓名": "张三", "成绩": 75},
{"学号": 2, "姓名": "李四", "成绩": 96},
{"学号": 3, "姓名": "王五", "成绩": 93},
{"学号": 4, "姓名": "赵六", "成绩": 87},

       我们上次涉及到了对简单列表的排序,今天的主要内容是对复杂列表的排序。我们首先应该想到的思路是,我们定义完列表之后,我们通过key(键值)来引用对应的数值来进行排序。那么下面是我们的解题思路。

解答:

       首先呢,我们要先把整个列表给定义进去。

       然后,对列表内容进行排序,其中我们运用lambda函数,避免了我们再次定义函数,节省空间与时间。

       最后,我们将整理好的列表进行输出。因为是对学生成绩进行输出,这里我们采取,不改变原列表的方式,输出一个整理好的新列表的方式来解决。

      代码如下:

students = \
    [
{"学号": 1, "姓名": "张三", "成绩": 75},
{"学号": 2, "姓名": "李四", "成绩": 96},
{"学号": 3, "姓名": "王五", "成绩": 93},
{"学号": 4, "姓名": "赵六", "成绩": 87},
    ]
students_zhengli = sorted(students,
                          key=lambda x: x["成绩"],
                          reverse=True)
print(students_zhengli)

输出结果

 那么,下面我们来看第12题。

12.读取文件排序

解答:

       这道题,相比于前面的题来说,复杂不少。首先因为题是要我们通过文件的方式排序。那我们第一件事首先需要我们创建一个可读写的文件,来储存数据。

      其次,我们可以把这道题分为三个步骤,我们按部就班的来做。

      首先,我们需要读取文件;然后,对文件内的数据进行排序;最后,我们输出文件即可。理论存在,代码如下:

def read_file():
    result = []
    with open("./学生成绩") as fin:
        for line in fin:
            line = line[:-1]
            result.append(line.split(","))
    return result

def chengjishuchu(datas):
    return sorted(datas,
                  key=lambda x : int(x[2]),
                  reverse=True)
datas = read_file()
print("文件数据为:", datas)

datas = chengjishuchu(datas)
print("排序结果为:", datas)

输出结果:

        第12题算得上是比较复杂的一道题,还希望大家好好看看代码,多多理顺一下思路,如果有更好的方法,欢迎讨论,我们一起进步。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 首先,我们需要读取学生成绩文件,可以使用Python内置的open函数打开文件,然后使用readlines方法读取文件中的每一行数据。接着,我们可以使用split方法将每一行数据按照空格分割成列表,然后将学生姓名和成绩分别存储到字典中。最后,我们可以使用sorted函数对字典中的成绩进行排序,然后输出排名前几名的学生姓名和成绩即可。 具体实现代码如下: ```python # 打开学生成绩文件 with open('scores.txt', 'r') as f: # 读取每一行数据 lines = f.readlines() # 定义一个空字典,用于存储学生姓名和成绩 scores = {} # 遍历每一行数据 for line in lines: # 将每一行数据按照空格分割成列表 data = line.strip().split() # 将学生姓名和成绩分别存储到字典中 scores[data[0]] = int(data[1]) # 对字典中的成绩进行排序 sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) # 输出排名前几名的学生姓名和成绩 for i in range(3): print('第{}名:{},成绩:{}'.format(i+1, sorted_scores[i][0], sorted_scores[i][1])) ``` 以上代码中,我们假设学生成绩文件名为'scores.txt',并且只输出排名前3名的学生姓名和成绩。如果需要输出更多名次的学生信息,只需要修改最后一个for循环的范围即可。 ### 回答2: 在Python中,我们可以使用文件读写操作对学生的成绩进行排序文件读写提供了一个非常方便的方式来读取大量的信息,然后对这些信息进行处理和排序。 以下是一个简单的Python程序,它可以读取一个包含学生成绩文件,然后将其排序: ``` # 打开文件 with open('scores.txt', 'r') as f: # 读取文件中的每一行 lines = f.readlines() # 将每一行分割成列表,并将成绩转为数字类型 scores = [] for line in lines: fields = line.strip().split(',') name = fields[0] score = int(fields[1]) scores.append((name, score)) # 根据成绩从高到低排序 scores.sort(key=lambda x: x[1], reverse=True) # 输出排序后的学生成绩 for s in scores: print('{0}: {1}'.format(s[0], s[1])) ``` 在这个程序中,我们首先打开包含学生成绩文件(`scores.txt`),然后读取文件中的每一行。我们使用`readlines()`方法来读取每一行,这将返回一个包含所有行的字符串列表。 然后,我们对每一行进行处理,将它们的成绩转换为数字,并保存在一个列表中。我们使用元组来保存每个学生的姓名和成绩。 最后,我们使用`sort()`方法对列表进行排序,根据成绩从高到低排序。在这里,我们使用一个匿名函数来指定排序顺序,该函数接受每个元组为参数,并返回该元组的第二个元素(即成绩)。 最后,我们遍历排序后的列表,并打印每个学生的姓名和成绩。 需要注意的是,在读取文件时,我们使用了`with`语句来打开文件。这样做有两个好处:首先,当`with`块结束时,文件将被自动关闭;其次,这样做可以确保在任何情况下都能正确关闭文件,即使发生异常也不例外。 ### 回答3: Python文件的读写是处理和存储数据的重要工具之一。对于数据处理中的学生成绩排序Python中有许多方法可以实现。 首先,将学生成绩数据保存在一个文本文件中,每行表示一个学生的成绩信息,包括学生姓名、学号和成绩。可以使用Python中的open()函数来打开文件读取文件中的数据。文件可以保存在本地文件系统中,也可以保存在网络上的存储设备或者是云存储上。 然后,可以使用Python中的Pandas库来对数据进行排序。Pandas是一个数据分析库,提供了许多数据分析工具和功能,包括排序和数据过滤等。在排序之前,可以使用Pandas.read_csv()函数读取文件,将其转换为Pandas中的DataFrame对象,然后使用DataFrame.sort_values()函数对数据进行排序。 在排序时,根据用户需求可以选择按照学生姓名、学号或者成绩等数据字段进行排序。可以使用DataFrame.sort_values()函数的参数来指定按照哪个字段进行排序,例如:df.sort_values(by='成绩'),表示按照成绩字段进行排序。 另外,在排序时还可以设置升序或降序排列。通过设置参数ascending来指定降序还是升序,True表示升序,False则表示降序。 最后,将排序后的数据保存到新的文本文件中或将其输出到控制台或其他设备上。 总之,Python文件的读写是Python程序中不可或缺的一部分。通过读取、处理和存储数据,我们可以优化数据分析的过程,并且Python的Pandas库为我们提供了更多的工具和便捷的方法,使得数据分析变得更加高效和便捷。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

裕善·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值