Python期末完成以下程序的设计:某体操比赛共有10名运动员参加
Python期末完成以下程序的设计:某体操比赛共有10名运动员参加,12名评委将根据运动员表现进行评分(满分10分),请编写Python程序,解决下列问题:1).每个运动员评分中去掉一个最高分和一个最低分,计算平均成绩,然后给出运动员排名;2).尽量减少人为因素,组委会要求去掉第一个问题中打最高分或最低分次数排名前二的评委给每个运动员的评分,然后计算平均成绩后排名。只有核心方法没有GUIimpor
·
Python期末
完成以下程序的设计:某体操比赛共有10名运动员参加,12名评委将根据运动员表现进行评分(满分10分),请编写Python程序,解决下列问题:
1).每个运动员评分中去掉一个最高分和一个最低分,计算平均成绩,然后给出运动员排名;
2).尽量减少人为因素,组委会要求去掉第一个问题中打最高分或最低分次数排名前二的评委给每个运动员的评分,然后计算平均成绩后排名。
只有核心方法没有GUI
import os # os为内置模块,是一定存在的
count = 3 # 最大检测次数,即第一次检测不存在则安装,会有安装失败的情况,就会再来一次
while count:
try:
import numpy # 引入需要的模块
print('numpy模块已安装')
break
except:
print('numpy模块未安装,现在准备开始安装')
os.system('pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple ')
count -= 1
continue
'''
导入 tkinter 导入numpy
'''
import tkinter as tk
import tkinter.messagebox
import tkinter.filedialog
import numpy as np
'''
定义一个运动员实体类
'''
class Athlete:
def __init__(self):
self.name=""
self.avg = 0
'''
定义App类
'''
class App(tk.Frame): #App 继承于tkinter 的 Frame
def __init__(self,master=None):
tk.Frame.__init__(self,master) #初始化 Frame
self.grid() #App 的 布局方式为 grid()
self.CreateMenubar() #创建 菜单
self.CreateWidget() #创建主体窗口
window['menu'] = self.Menubar #主体窗口的menu为 Menubar
self.data = None #初始化数据 data
self.AthleteList = [] #初始化 运动员表
self.Coach1 = 0 #初始化 两个最低最高分教练
self.Coach2 = 0
self.dataBackUp = None #初始化 数据备份
self.AvgList= [] #初始化 平均值表
def CreateWidget(self): #创建主体
#GUI初始化窗口
#...........
def CreateMenubar(self):
#初始化菜单栏
#...........
#打开文件
def OpenFile(self):
#选择文件对话框
FilePath = tk.filedialog.askopenfilename(filetypes=[('文本文件','.txt')])
if FilePath != "":
#numpy 读取文件转为ndarray 把程序的data 赋值为这个array
self.data = np.loadtxt(FilePath)
#备份数据
self.dataBackUp = np.array(self.data)
#显示数据到InfoLabel
self.InfoLabel['text'] = self.data
#找到 打最高分或最低分次数排名前二的评委
def FindeTwoCoach(self):
FList = []
for i in range (0,self.data.shape[0]):
FList.append(np.argmax( self.data[i,:]))#找每一个运动员的最高分位置 并添加到FList中
FList.append(np.argmin(self.data[i,:]))#找每一个运动员的最低分位置 并添加到FList中
CoachList = np.array(FList)
print(CoachList)
self.Coach1 = np.argmax(np.bincount(CoachList))#统计重复次数最多的元素(就是打最高最低分次数最多的教练)
itemindex = np.argwhere(CoachList == self.Coach1)
print(itemindex)
CoachListNew = np.delete(CoachList,itemindex)#删掉打最高最低分次数最多的教练 再来找第二个
print(CoachListNew)
self.Coach2 = np.argmax(np.bincount(CoachListNew))#统计重复次数最多的元素(就是打最高最低分次数最多的教练)
self.InfoLabel ['text']= "打最高分或最低分次数排名前二的评委分别为:"+ str(self.Coach1)+"号和"+str(self.Coach2)+"号"
#去掉最高最低分
def RemoveHighestAndLowest(self):
ResArrary = []
for i in range(0,self.data.shape[0]):
arr = np.delete(self.data[i,:],np.argmax(self.data[i,:]))
arr = np.delete(arr,np.argmin(arr))
# arr = np.delete(arr[i,:],np.argmin(arr[i,:]))
ResArrary.append(list(arr))
# print(ResArrary)
self.data = np.array(ResArrary)
self.InfoLabel['text'] = self.data
#去掉两个高低分教练的影响
def RemoveCoachAffect(self):
self.FindeTwoCoach()
res = np.delete(self.data,[self.Coach1,self.Coach2],axis=1)
self.data = res
self.InfoLabel['text'] = self.data
#还原数据
def RestoreData(self):
self.data = np.array(self.dataBackUp)
self.InfoLabel['text'] = self.data
#计算平均数
def CaculateAVG(self):
self.AvgList = None
print(self.data)
res = np.mean(self.data , axis=1)#算行的平均数
self.AvgList = res
self.InfoLabel['text'] = res
#生成最后的运动员表
def GenerateAthleteList(self):
print("生成")
self.AthleteList = []
print(len(self.AvgList))
for a in range(0,len(self.AvgList)):
name = "运动员"+str(a)+"号"
athlete = Athlete()
athlete.name = name
athlete.avg = self.AvgList[a]
self.AthleteList.append(athlete)
self.AthleteList.sort(key= lambda x : x.avg)#根据运动员的平均分排序
if __name__ == '__main__':
window = tk.Tk()
window.title("评委系统")
window.geometry('800x400')
app = App(master=window)
app.mainloop()
更多推荐
所有评论(0)