用Python写以下程序分数保留1为小数,且输出最高分和最低分,为丰富校园文化生活,学校拟组织一场歌手大赛,从参赛选手中选拔出十名相对突出的学生,授予“校园十大歌手”称号。比赛之中设置有评委组,每名选手演唱完毕之后会由评委组的十名评委打分。为保证比赛公平公正、防止作弊和恶意打分,计算得分(即平均分)时会先去掉最高分和最低分。
时间: 2023-06-06 08:07:25 浏览: 108
以下是代码实现:
```python
scores = [] # 存放所有分数的列表
for i in range(10): # 循环输入10个分数
score = float(input("请输入第{}个选手的分数:".format(i+1)))
scores.append(score)
scores.sort() # 将列表中的分数从小到大排序
avg_score = (sum(scores)-scores[0]-scores[-1])/8 # 计算平均分,去掉最高分和最低分
print("最高分:{:.1f}".format(scores[-1]))
print("最低分:{:.1f}".format(scores[0]))
print("平均分:{:.1f}".format(avg_score))
```
如果你希望程序给出的最高分和最低分的选手编号,可以将代码稍作修改:
```python
scores_with_num = [] # 存放所有分数及其对应的选手编号的列表
for i in range(10): # 循环输入10个分数及其对应的选手编号
score = float(input("请输入第{}个选手的分数:".format(i+1)))
scores_with_num.append((i+1, score))
scores_with_num.sort(key=lambda x:x[1]) # 将列表中的分数从小到大排序
avg_score = (sum(p[1] for p in scores_with_num[1:-1]))/8 # 计算平均分,去掉最高分和最低分
print("最高分是第{}个选手的{:.1f}分".format(scores_with_num[-1][0], scores_with_num[-1][1]))
print("最低分是第{}个选手的{:.1f}分".format(scores_with_num[0][0], scores_with_num[0][1]))
print("平均分为{:.1f}分".format(avg_score))
```
上述代码使用了元组存放每个选手的编号和分数,并使用 lambda 函数作为排序的 key,取第二个元素(即分数)作为比较的依据。计算平均分时也是直接取列表中第 2 到倒数第 2 个元素。
阅读全文