m0_64724957 2021-12-01 14:40 采纳率: 100%
浏览 111
已结题

请问下列问题应该如何运用Python解决,求帮助

img

  • 写回答

2条回答 默认 最新

  • 索利亚噶通 2021-12-01 15:45
    关注

    能用点个采纳吧

    class Solution:
        def __init__(self, fileName):
            self.data = self.readFile(fileName)
            self.calculateScore()       # 经过计算数据
    
        def readFile(self, fileName):
            with open(fileName, 'r', encoding='utf-8') as f:      # 读取文件
                contents = f.readlines()     
            contents = [each.strip('\n') for each in contents]    # 去除换行符
            contents = [each.split(",") for each in contents]     # 按逗号分割(看你的题目中无空格)
    
            return contents
    
        def calculateScore(self):       
            for idx, content in enumerate(self.data):
                temp = content[:2]      # 将编号和名字放入其中
                # round为四舍五入
                score = round(int(content[2]) * 0.1 + int(content[3]) * 0.6 + int(content[4]) * 0.3)  # 加权成绩
                temp.append(score)
                temp.append(int(content[3]))      # 将高考成绩也放入其中
                self.data[idx] = temp
    
         # 人数输出格式
        def printPeople(self): 
            self.dataDict = {}       # 统计各个分数的人数
            for each in self.data:
                if each[2] in self.dataDict.keys():
                    self.dataDict[each[2]] += 1
                else:
                    self.dataDict[each[2]] = 1
    
            dataList = sorted(self.dataDict.items(), key=lambda x:x[0], reverse=True)  # 按分数进行排序
            print("分数          当前分数人数          累积人数")
            count = 0  # 累积人数
            for each in dataList:
                count += each[1]
                print("{}              {}                   {}".format(each[0], each[1], count))
    
        # 按录取格式输出
        def printRecruit(self):
            dataSorted = sorted(self.data, key=lambda x:x[2], reverse=True) # 按总分排序
            dataSortedgaokao = sorted(self.data, key=lambda x:x[3], reverse=True) # 按高考排序
    
            allStudent = len(dataSorted) # 总人数
            # 前百分之15, 没说怎么取整啊?!   如果总人数3个人, 3 * 0.15 = 0.45, 到底录取一个还是0个?
            allScore = int(allStudent * 0.15)     # 总分前15%的人数
            gaokaoScore = int(allStudent * 0.6)   # 高考前60%的人数
            gaokaoNumber = [dataSortedgaokao[i][0] for i in range(gaokaoScore)]
    
            for i in range(allScore):      # 在前百分之15中寻找高考前百分之60的人
                if dataSorted[i][0] in gaokaoNumber:
                    print(dataSorted[i][0] + "," + dataSorted[i][1])
    
    filename = 'data.txt'
    x = Solution(filename)
    x.printPeople()        # 按人数格式输出
    x.printRecruit()     # 按录取格式输出
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 修改了问题 12月1日
  • 修改了问题 12月1日
  • 展开全部

悬赏问题

  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 机器学习简单问题解决
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写