用python做一个跳水打分系统,要求:生成选手的10个分数,得到选手的8个有效分,计算选手的平均分和最后得分,将所以选手的得分写入Excel文件,将所以选手的得分和信息写入二维列表,最后将所以选手的得分排序后写入Excel文件
时间: 2024-12-13 10:23:16 浏览: 2
为了实现上述需求,你需要结合pandas库来处理数据以及openpyxl或xlsxwriter库来操作Excel文件。下面是一个步骤指南:
1. 首先,定义一个`Diver`类,包含姓名、10个分数、有效分数数量和初始总分属性。
```python
import pandas as pd
class Diver:
def __init__(self, name):
self.name = name
self.scores = [0] * 10
self.valid_scores = []
self.total_score = 0
def add_score(self, score):
self.scores.append(score)
def update_valid_scores(self):
self.valid_scores = self.scores[:8]
def calculate_average_score(self):
if len(self.valid_scores) > 0:
return sum(self.valid_scores) / len(self.valid_scores)
else:
return 0
def save_to_excel(self, filename):
data = {
'Name': [self.name],
'Scores': self.scores,
'Valid Scores': self.valid_scores,
'Average Score': self.calculate_average_score(),
'Total Score': self.total_score
}
df = pd.DataFrame(data)
df.to_excel(filename, index=False)
```
2. 创建选手实例,并模拟添加分数:
```python
diver1 = Diver('选手A')
for _ in range(10):
diver1.add_score(random.randint(1, 10)) # 使用随机数模拟实际分数
# 更新有效分数并计算其他统计数据
diver1.update_valid_scores()
diver1.total_score = sum(diver1.valid_scores)
# 写入Excel
diver1.save_to_excel('divers_scores.xlsx')
# 对所有选手(例如list)做类似操作,然后合并到一个大表中:
all_divers = [Diver(name=f"选手{i+1}") for i in range(10)]
...
# 最后,汇总所有选手的数据,排序后保存到Excel
all_data = [d.__dict__ for d in all_divers]
sorted_data = sorted(all_data, key=lambda x: x['Total Score'], reverse=True)
with pd.ExcelWriter('all_divers_scores_sorted.xlsx') as writer:
pd.DataFrame(sorted_data).to_excel(writer, index=False)
```
注意:这个示例假设你已经导入了random库,并且`random.randint(1, 10)`用于生成随机分数。在实际应用中,你需要连接数据库或者读取CSV等真实数据源。同时,这里省略了一些错误处理和优化细节。在运行之前,请确保已安装所需的库 (`pandas` 和 `openpyxl` 或 `xlsxwriter`)。
阅读全文