python假设某学校所有课程每学期允许多次考试,学生可随时参加考试,系统自动将每次考试的成绩都添加到Excel 文件(包含3列:姓名、课程、成绩)中,现期末要求统计所有学生每门课程的最高成绩。 编写程序,模拟生成若干同学的成绩并写人 Excel 文件,其中学生姓名和课程名称均可重复,也就是允许出现同一门课程的多次成绩,最后统计所有学生每门课程的最高成绩,并写人新的 Excel 文件。
时间: 2024-03-26 13:37:14 浏览: 455
python课程设计学生成绩管理系统源码+汇报PPT.zip
5星 · 资源好评率100%
好的,这个任务需要用到Python中的pandas和openpyxl两个库,其中pandas用于读取和处理Excel文件,openpyxl用于写入Excel文件。以下是一个可供参考的Python代码。
```python
import pandas as pd
from openpyxl import Workbook
# 定义常量
NAMES = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十', '郑十一', '冯十二']
COURSES = ['语文', '数学', '英语', '物理', '化学', '生物']
SCORE_RANGE = (60, 100)
# 生成随机成绩
def generate_score():
score = random.randint(*SCORE_RANGE)
return score
# 生成指定数量的随机成绩
def generate_scores(num):
data = []
for i in range(num):
name = random.choice(NAMES)
course = random.choice(COURSES)
score = generate_score()
data.append([name, course, score])
return data
# 写入Excel文件
def write_to_excel(data, filename):
df = pd.DataFrame(data, columns=['姓名', '课程', '成绩'])
writer = pd.ExcelWriter(filename)
df.to_excel(writer, index=False)
writer.save()
# 读取Excel文件
def read_from_excel(filename):
df = pd.read_excel(filename)
return df
# 统计每个学生每门课程的最高成绩
def get_max_scores(df):
grouped = df.groupby(['姓名', '课程'])
max_scores = grouped['成绩'].max().reset_index()
return max_scores.values.tolist()
# 写入新的Excel文件
def write_max_scores_to_excel(max_scores, filename):
wb = Workbook()
ws = wb.active
ws.append(['姓名', '课程', '最高成绩'])
for row in max_scores:
ws.append(row)
wb.save(filename)
# 测试
if __name__ == '__main__':
data = generate_scores(200)
write_to_excel(data, 'scores.xlsx')
df = read_from_excel('scores.xlsx')
max_scores = get_max_scores(df)
write_max_scores_to_excel(max_scores, 'max_scores.xlsx')
```
在以上代码中,我们首先定义了一些常量,如姓名、课程和成绩范围等信息。然后,我们编写了两个函数,`generate_score()` 和 `generate_scores(num)`,用于生成随机成绩。在 `generate_score()` 函数中,我们使用了 `random` 模块来生成成绩。在 `generate_scores(num)` 函数中,我们调用了 `generate_score()` 函数来生成指定数量的随机成绩。
接着,我们编写了两个函数,`write_to_excel(data, filename)` 和 `read_from_excel(filename)`,用于将生成的随机成绩写入Excel文件,并从Excel文件中读取成绩。在 `write_to_excel(data, filename)` 函数中,我们使用了 `pandas` 库将数据转化为DataFrame格式,并使用 `pd.ExcelWriter()` 函数创建Excel文件,然后使用 `df.to_excel()` 函数将数据写入Excel文件。在 `read_from_excel(filename)` 函数中,我们使用了 `pandas` 库的 `pd.read_excel()` 函数读取Excel文件内容,并将其转化为DataFrame格式。
然后,我们编写了一个函数 `get_max_scores(df)`,用于统计每个学生每门课程的最高成绩。在该函数中,我们使用了 `pandas` 库的 `groupby()` 函数将数据按姓名和课程进行分组,并使用 `max()` 函数获取每组中的最高成绩。最后,我们编写了一个函数 `write_max_scores_to_excel(max_scores, filename)`,用于将统计结果写入Excel文件中。
最后,在 `if __name__ == '__main__':` 语句中,我们调用了 `generate_scores(num)` 函数生成200个随机成绩,并将其写入Excel文件 `scores.xlsx` 中。然后,我们调用了 `read_from_excel(filename)` 函数从Excel文件中读取成绩,并将其存储在变量 `df` 中。接着,我们调用了 `get_max_scores(df)` 函数统计每个学生每门课程的最高成绩,并将结果存储在变量 `max_scores` 中。最后,我们调用了 `write_max_scores_to_excel(max_scores, filename)` 函数将统计结果写入新的Excel文件 `max_scores.xlsx` 中。
以上是一个可供参考的Python代码,您可以根据需要进行修改和完善,以满足您的实际需求。
阅读全文