python编写十大歌手打分排名程序,分数只能输入0~10,去掉一个最高分和最低分。
时间: 2024-11-24 20:40:25 浏览: 51
在Python中,可以使用列表和`heapq`库来实现这样的打分排名程序。假设我们已经有了歌手的得分列表,可以按照以下步骤操作:
```python
import heapq
def rank_singers(scores):
# 检查输入是否都在0到10之间
if not all(0 <= score <= 10 for score in scores):
raise ValueError("所有分数必须在0到10之间")
# 排序并去除最高分和最低分
sorted_scores = sorted(scores)
highest_score = sorted_scores.pop() # 最高分
lowest_score = sorted_scores.pop(0) # 最低分
# 使用堆(最小堆)保存剩余得分,保证最小值在堆顶
heap = []
for score in sorted_scores:
heapq.heappush(heap, -score) # Python的最小堆,负数表示大数值
# 取出前n个最大负数(即最小的正数),得到最终排名
top_n = len(sorted_scores) + 1 # 因为去掉了两个极端值,所以需要加1
ranked_singers = [scores.index(-heapq.heappop(heap)) for _ in range(top_n)]
return ranked_singers, [highest_score, lowest_score]
# 示例用法
scores = [8, 5, 9, 7, 10, 2, 6, 3, 4]
ranked, extremes = rank_singers(scores)
print("歌手排名:", ranked)
print("最高分和最低分:", extremes)
```
这个程序首先检查所有分数的有效性,然后排序并移除最高分和最低分,接着使用最小堆来快速找到剩余分数中的前几个。注意,由于Python的堆是降序排列的,我们需要取负数以获得真正的最小值。
阅读全文