第三次作业「中山大学Python一对一」

AI悦创原创1v1Python 1v1中山大学1v1Python 1v1中山大学大约 13 分钟...约 3989 字

Question 1

请在超星学习平台“章节”的第12讲下找到文本文件 mid_score.txt ,该文本文件包含四列数据,第一列为学号,第二、三、四列分别为语文、数学和英语课程的分数。请编写 Python 程序,实现以下功能。

  • 读取该文本文件,计算每个学生的总分;
  • 将学生学号和总分输出到一个文本文件 score_rank.txt,并将总分按从高到低排序。也就是说,在你最后得到的文本文件score_rank.txt 里,包含两列数据,第一列是学生的学号,第二列是该学生的总分,且数据是按照总分从高到低排列的。

提示与注意:

  • 由于 matrix 平台不支持测试文件读写的代码,所以当你在答题栏填入代码后,可能会出现编译错误的信息,请无视之,此题会进行人工判分。
  • 请回忆,如何逐行阅读文件,以及如何对每一行的字符串进行拆分?
  • 排序可能要用到之前课件里提到的 sorted 函数,请自行查看课件,将一组数字从大到小排列,需要将 sorted 函数里 reverse 参数设成 True。
  • 测试你的代码时,请将要读取的文本文件和你的代码文件放在同一个文件目录下,这样无需指定文本文件路径,否则会给我们批改带来麻烦。
Answer

答案1

# -*- coding: utf-8 -*-
# @Time    : 2022/12/13 10:49
# @Author  : AI悦创
# @FileName: q1.py
# @Software: PyCharm
# @Blog    :https://bornforthis.cn/
# head data: 学号 语文 数学 英语
# 学号和总分 save to score_rank.txt 排序:从高到低
from pprint import pprint


def file_opt(filename, model=None, content=""):
    """
    read file
    :return: contents type: list
    """
    _model = "r"
    if model:
        _model = model
    with open(filename, _model) as f:
        if _model == "r":
            contents = f.readlines()  # list
            return contents
        else:
            f.write(content)
    # print(contents)


def parse(contents: list):
    """
    :param contents:
    :return:
    """
    result_lst = []
    str_to_float = lambda x: float(x)
    for con in contents:
        # print(con.strip().split())
        str_to_float_lst = list(map(str_to_float, con.strip().split()))
        student_id, discipline = str_to_float_lst[0], sum(str_to_float_lst[1:])
        # print(student_id)
        # print(discipline)
        result_lst.append((student_id, discipline))
    # pprint(result_lst)
    return sorted(result_lst, reverse=True, key=lambda x: x[1])


if __name__ == '__main__':
    contents = file_opt("mid_score.txt")
    result_lst = parse(contents)
    # pprint(result_lst)
    for student_id, total in result_lst:
        TEMPLATE = f"{student_id}\t{total}\n"
        file_opt("score_rank.txt", model="a+", content=TEMPLATE)

答案2

# encoding: utf-8
"""
@file: assigment 1_2.py
@time: 2022/12/13 10:52
@desc:作业 1 -4
"""


# 作业1
def calc_total_score():
    with open('asserts/mid_score.txt', encoding='utf-8', mode='r') as f:
        txt = f.read().splitlines()
    score_list = []
    for item in txt:
        if len(item.split(' ')) >= 4:
            student_id = item.split(' ')[0]
            yuwen = item.split(' ')[1]
            shuxue = item.split(' ')[2]
            yingyu = item.split(' ')[3]
            total_score = int(yuwen) + int(shuxue) + int(yingyu)  # 计算总分
            score_list.append((student_id, total_score))

    # 对总分进行排序
    sort_score_list = sorted(score_list, key=lambda s: s[1], reverse=True)
    with open('score_rank.txt', mode='a', encoding='utf-8') as f:
        for item in sort_score_list:
            f.write(item[0] + ' ' + str(item[1]) + '\n')

if __name__ == '__main__':
    calc_total_score()
公众号:AI悦创【二维码】

AI悦创·编程一对一

AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发、Web、Linux」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh

C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh

方法一:QQopen in new window

方法二:微信:Jiabcdefh

上次编辑于:
贡献者: AndersonHJB,AI悦创
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度