Python期末作业

完成以下程序的设计:某体操比赛共有10名运动员参加,12名评委将根据运动员表现进行评分(满分10分),请编写Python程序,解决下列问题:

1).每个运动员评分中去掉一个最高分和一个最低分,计算平均成绩,然后给出运动员排名;
2).尽量减少人为因素,组委会要求去掉第一个问题中打最高分或最低分次数排名前二的评委给每个运动员的评分,然后计算平均成绩后排名。

这里给出实验结果,源码之后共享!!!
给出源码

def dispose_file(f):#处理数据文件函数
    # 将文件存储在lis列表中
    lis = []
    for line in f:
        # 使用map函数将每一行分数中的每个分数转化为float类型,然后在转化成list类型赋值给 l
        l = list(map(float, line.split()))
        lis.append(l)
    return(lis)

def mark(lis,n):  #打分函数 lis参数是一个二维分数列表
    #求平均分
    arra = []
    j = 1
    if n==1:
        #这个求的是没有去掉评委的每个运动员的平均分
        for i in lis:
           x = (sum(i) - max(i) - min(i)) / 10
           # j:对应运动员的下标   x:平均分  将这个元组添加到(j,x)arra列表中
           arra.append((j, x))
           j += 1
    else:
        #这个求的是去掉了评委之后每个运动员的平均分
        for i in lis:
          x = sum(i)/10
          arra.append((j, x))
          j += 1
    #这里使用了sort函数对arra列表的第二个元素进行排序
    #key=lambda x:x[1] 利用了lambda表达式定义了一个匿名函数,x为参数,x[1]为返回值,返回arra中的第二个元素
    #reverse = True表示降序 reverse = False 表示升序
    arra.sort(key=lambda x:x[1],reverse = True)
    for i in range(len(arra)):
        print("第{0:3}名 {1:4}号运动员  平均分数为:{2:5.2f}".format(i+1,arra
  • 14
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Champion.XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值