玖柒291 2022-05-31 09:03 采纳率: 100%
浏览 84
已结题

Python文件成绩按要求重新排序

李华用 grade . bxt 来记录学生的成绩,每行有4个正整数,分别用空格分开,每一行的第一列代表学生的学号,第二列代表学生的语文成绩,第三列代表学生的数学成绩,第四列代表学生的总分(学号均用两位数表示,成绩均用三位数表示,不消足两三位的在前面填充0.如89变为089),读取 grade . txt 文件并按要求将结果进行排序,排序后将结果写入 answer . txt .排序要求如下:1.默认先按总分从高到低排序2.当总分相同时按数学成绩从高到低排序3.当语文和数学成绩都相同时则按学生的学号从高到低排序。

  • 写回答

3条回答 默认 最新

  • chuifengde 2022-05-31 16:25
    关注
    dirname = r'C:\Users\Administrator\Desktop'
    
    with open(dirname + '/grade.txt', 'r', encoding = 'utf-8') as f:
        v = [list(map(int, i.strip().split("\t"))) for i in f.readlines()]
        result = sorted(v, key =lambda x: (x[3], x[2],x[1], x[0]), reverse = True)
        res = [list(map(lambda x: str(x).rjust(2, '0'), i)) for i in result]
    
    with open(dirname + '/answer.txt', 'w', encoding = 'utf-8') as f:
        for i in res:
            print(*i,sep = '\t',file = f )
            
    'grade.txt'
    """00    130    129    259
    01    116    092    208
    02    092    113    205
    03    149    103    252
    04    102    135    237
    05    117    085    202
    06    106    092    198
    07    092    122    214
    08    146    141    287
    09    104    106    210
    10    122    135    257
    11    111    128    239
    12    125    135    260
    13    146    099    245
    14    111    110    221
    15    093    105    198
    16    096    101    197
    17    135    118    253
    18    101    145    246
    19    119    118    237
    20    118    128    246
    21    145    111    256
    22    130    093    223
    23    094    114    208
    24    140    138    278
    25    136    144    280
    26    092    096    188
    27    132    134    266
    28    148    129    277"""
    'answer.txt'
    """08    146    141    287
    25    136    144    280
    24    140    138    278
    28    148    129    277
    27    132    134    266
    12    125    135    260
    00    130    129    259
    10    122    135    257
    21    145    111    256
    17    135    118    253
    03    149    103    252
    18    101    145    246
    20    118    128    246
    13    146    99    245
    11    111    128    239
    04    102    135    237
    19    119    118    237
    22    130    93    223
    14    111    110    221
    07    92    122    214
    09    104    106    210
    23    94    114    208
    01    116    92    208
    02    92    113    205
    05    117    85    202
    15    93    105    198
    06    106    92    198
    16    96    101    197
    26    92    96    188"""
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 赞助了问题酬金5元 5月31日
  • 修改了问题 5月31日
  • 展开全部

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么