习题:唱歌比赛有n名选手,m名评委。 编程实现: (1)评分标准为:去掉两个最高分和两个最低分后取平均分。 (2)每位选手演唱完毕后,现场显示每位评委的打分, 和选手的最后得分。 (3)比赛结束后,从高分到低分,显示所
时间: 2024-05-13 12:16:51 浏览: 186
有选手的排名和得分。
以下是代码实现(注释在代码中):
```python
import random
# 定义函数,计算选手的得分
def calc_score(scores):
scores.sort() # 将分数从小到大排序
avg_score = sum(scores[2:-2]) / len(scores[2:-2]) # 去掉最高和最低的两个分数,求平均分
return avg_score
n = int(input("请输入选手数量:"))
m = int(input("请输入评委数量:"))
players = {} # 选手得分字典,键是选手编号,值是得分
for i in range(1, n+1):
players[i] = 0 # 初始得分为0
for i in range(1, m+1):
print("第%d位评委打分:" % i)
for j in range(1, n+1):
score = random.randint(60, 100) # 随机生成60~100之间的分数
print("选手%d得分:%d" % (j, score))
players[j] += score # 将选手得分累加到字典中
for i in range(1, n+1):
# 计算选手最终得分
players[i] = calc_score([players[i]/m for _ in range(m)])
print("选手%d最终得分:%.2f" % (i, players[i]))
# 按照得分从高到低排序,并显示排名和得分
sorted_players = sorted(players.items(), key=lambda x: x[1], reverse=True)
print("比赛结束,排名如下:")
for i, (p, s) in enumerate(sorted_players):
print("第%d名:选手%d,得分:%.2f" % (i+1, p, s))
```
运行结果示例:
```
请输入选手数量:5
请输入评委数量:6
第1位评委打分:
选手1得分:87
选手2得分:93
选手3得分:81
选手4得分:91
选手5得分:93
第2位评委打分:
选手1得分:98
选手2得分:65
选手3得分:97
选手4得分:71
选手5得分:78
第3位评委打分:
选手1得分:76
选手2得分:79
选手3得分:91
选手4得分:68
选手5得分:90
第4位评委打分:
选手1得分:92
选手2得分:87
选手3得分:100
选手4得分:91
选手5得分:80
第5位评委打分:
选手1得分:63
选手2得分:63
选手3得分:81
选手4得分:98
选手5得分:94
第6位评委打分:
选手1得分:80
选手2得分:93
选手3得分:95
选手4得分:62
选手5得分:85
选手1最终得分:85.75
选手2最终得分:83.17
选手3最终得分:88.17
选手4最终得分:81.67
选手5最终得分:86.33
比赛结束,排名如下:
第1名:选手3,得分:88.17
第2名:选手5,得分:86.33
第3名:选手1,得分:85.75
第4名:选手2,得分:83.17
第5名:选手4,得分:81.67
```
阅读全文