Python期末完成以下程序的设计:某体操比赛共有10名运动员参加
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python期末完成以下程序的设计:某体操比赛共有10名运动员参加,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3924字,纯文字阅读大概需要6分钟。
内容图文
![Python期末完成以下程序的设计:某体操比赛共有10名运动员参加](/upload/InfoBanner/zyjiaocheng/616/9b974154100543668b34e375046746a5.jpg)
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()
内容总结
以上是互联网集市为您收集整理的Python期末完成以下程序的设计:某体操比赛共有10名运动员参加全部内容,希望文章能够帮你解决Python期末完成以下程序的设计:某体操比赛共有10名运动员参加所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。