Python期末
完成以下程序的设计:某体操比赛共有10名运动员参加,12名评委将根据运动员表现进行评分(满分10分),请编写Python程序,解决下列问题:
1).每个运动员评分中去掉一个最高分和一个最低分,计算平均成绩,然后给出运动员排名;
2).尽量减少人为因素,组委会要求去掉第一个问题中打最高分或最低分次数排名前二的评委给每个运动员的评分,然后计算平均成绩后排名。
只有核心方法没有GUI
import 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):
def __init__(self,master=None):
tk.Frame.__init__(self,master)
self.grid()
self.CreateMenubar()
self.CreateWidget()
window['menu'] = self.Menubar
self.data = None
self.AthleteList = []
self.Coach1 = 0
self.Coach2 = 0
self.dataBackUp = None
self.AvgList= []
def CreateWidget(self):
def CreateMenubar(self):
def OpenFile(self):
FilePath = tk.filedialog.askopenfilename(filetypes=[('文本文件','.txt')])
if FilePath != "":
self.data = np.loadtxt(FilePath)
self.dataBackUp = np.array(self.data)
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.append(np.argmin(self.data[i,:]))
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))
ResArrary.append(list(arr))
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()