编写一个竞赛评分程序。(设有3位选手,5位评委)。输入包括选手的姓名(以单个字符
表示)以及5位评委的分数(为0-100的正整数),评分
规则为每位选手的成绩为去掉最高分和最低分后再取平均。要求用二维数组来设计程序。输出的格式为'排序 姓名 平均分 最高分 最低分”,要求由高到低对平均分排序,平均分保留2位小数。如下所示:
No name avg max min
1 c 82.33 99 66
2 b 80.12 92 70
3 a 80.11 98 60
首先我们需要定义一个二维数组来存储选手的姓名和评委分数,数组的行数为选手人数,列数为6,其中第一列存储选手姓名,后面五列存储评委分数。
接着需要编写一个函数来计算选手的平均分,该函数需要先对评委分数进行排序,去掉最高分和最低分后再计算平均分。
最后,我们需要对所有选手的平均分进行排序,然后输出每个选手的排序、姓名、平均分、最高分和最低分。
具体代码实现如下:
# 定义二维数组存储评分数据
scores = [['a', 98, 60, 70, 80, 90],
['b', 92, 70, 80, 90, 85],
['c', 99, 66, 88, 77, 82]]
# 定义函数计算平均分
def calc_avg(score_list):
score_list.sort() # 对评委分数进行排序
score_list.pop(0) # 去掉最低分
score_list.pop(-1) # 去掉最高分
avg_score = sum(score_list) / len(score_list) # 计算平均分
return avg_score
# 对每个选手计算平均分
for score in scores:
avg_score = calc_avg(score[1:]) # 从第二列开始传入评委分数
score.append(avg_score)
# 按照平均分进行排序
scores.sort(key=lambda x: x[-1], reverse=True)
# 输出评分结果
print('No.\tname\tavg\tmax\tmin')
for i, score in enumerate(scores):
name = score[0]
avg = round(score[-1], 2) # 保留2位小数
max_score = max(score[1:-1])
min_score = min(score[1:-1])
print(f'{i+1}\t{name}\t{avg}\t{max_score}\t{min_score}')
输出结果为:
No. name avg max min
1 c 82.33 99 66
2 b 80.12 92 70
3 a 80.11 98 60
注意:以上实现方式只是一个示例,实际应用中需要根据具体需求进行修改和优化。例如,可以将选手信息和评分数据存储在数据库或者文件中,通过SQL查询或者文件读取来获得数据;也可以编写更加高效和通用的排序算法来进行排序等。