写一个十大歌手评委评分的代码,要求如下:随机生成十位歌手的十次评分,评分范围为1—10,去除最高分和最低分,若有重复的最高分和最低分也要处理,统计每位歌手的平均分,并进行排名。从高分到低分打印输出每位歌手的排名,分数,以及去除的最高分和最低分
时间: 2024-04-29 16:26:14 浏览: 195
好的,下面是代码实现:
```python
import random
# 十位歌手的名字和每位歌手的分数
singers = ['歌手1', '歌手2', '歌手3', '歌手4', '歌手5', '歌手6', '歌手7', '歌手8', '歌手9', '歌手10']
scores = {}
# 生成十次评分
for i in range(10):
for singer in singers:
# 随机生成评分,并添加到对应歌手的分数列表中
score = random.randint(1, 10)
if singer in scores:
scores[singer].append(score)
else:
scores[singer] = [score]
# 去除最高分和最低分
for singer in singers:
# 如果只有一个评分,就不需要去除
if len(scores[singer]) <= 1:
continue
# 排序后去除最高和最低
sorted_scores = sorted(scores[singer])
min_score = sorted_scores[0]
max_score = sorted_scores[-1]
while min_score in [sorted_scores[0], sorted_scores[-1]]:
sorted_scores.remove(sorted_scores[0])
while max_score in [sorted_scores[0], sorted_scores[-1]]:
sorted_scores.remove(sorted_scores[-1])
scores[singer] = sorted_scores
# 计算每个歌手的平均分
averages = {}
for singer, score_list in scores.items():
averages[singer] = sum(score_list) / len(score_list)
# 按平均分从高到低排序
sorted_averages = sorted(averages.items(), key=lambda x: x[1], reverse=True)
# 输出每位歌手的排名、平均分以及去除的最高分和最低分
for rank, (singer, average) in enumerate(sorted_averages):
print('第{}名:{},平均分:{:.2f},去除最高分{}和最低分{}'
.format(rank + 1, singer, average, max(scores[singer]), min(scores[singer])))
```
注意:这里为了方便输出,使用了字符串格式化来打印每个歌手的排名和分数,需要Python3.6或以上版本才支持。如果你的Python版本较低,可以把输出的部分改成类似`print('第%d名:%s,平均分:%.2f,去除最高分%d和最低分%d' % (rank + 1, singer, average, max(scores[singer]), min(scores[singer])))`这样的形式。
阅读全文