文件score.txt中存储了5名学生的6门课程的成绩,共五行。读取该文件,统计每个学生的平均分,并将统计结果存入文件。score_avg.txt,
时间: 2024-12-13 22:23:44 浏览: 9
首先,你需要使用Python的内置模块如`open()`来打开并读取`score.txt`文件,然后逐行解析数据,每行数据表示一名学生的一组成绩。这里我们可以假设每行数据由学生姓名和逗号分隔的成绩组成,例如:"张三,80,90,95,75,85"。
下面是一个简单的Python脚本示例,它会完成这个任务:
```python
# 打开输入和输出文件
with open('score.txt', 'r') as score_file, open('score_avg.txt', 'w') as avg_file:
# 读取每一行
for line in score_file:
# 分割行内容,获取学生名字和成绩列表
student_name, *scores = line.strip().split(',')
# 计算平均分
average_score = sum(int(score) for score in scores) / len(scores)
# 将结果写入到新文件中
avg_file.write(f"{student_name}: {average_score}\n")
# 关闭文件
avg_file.close()
```
运行此脚本后,`score_avg.txt` 文件将会包含每位学生的平均分,格式类似:“张三: 85.0”。
相关问题
1设计一个数据结构,存储班级中所有同学的本学期五门课程的成绩信息, 包含三个元素,分别是学号,姓名,成绩。设计出该结构进行存储,为了简化,学号为1~100,学号为1的同学 姓名为 “AI”,学号为30的同学姓名为” A30”,每个同学每门课程的成绩均为随机生成的一个 60~100之间的随机数。 (1)当结构为 dic = (1:(A1', 160,60,60,60,60 111时,【不使用序列化方法】 ①把如上数据写入名字为 score.txt 的文件中。以字符串形式写入。 ②读出score.txt 文件中的内容到内存中,并使用循环对读出的字典进行控制台输出。
使用字典存储班级同学的成绩信息:
```
dic = {}
for i in range(1, 101):
name = 'A' + str(i)
score = [random.randint(60, 100) for j in range(5)]
dic[i] = [name] + score
```
其中,字典的key为学号,value为包含姓名和成绩的列表。
①将数据写入score.txt文件中:
```
with open('score.txt', 'w') as f:
for k, v in dic.items():
f.write(str(k) + ':' + str(v) + '\n')
```
将每个字典的key和value以字符串形式写入文件,每个字典占一行。
②从score.txt文件中读取数据并输出:
```
with open('score.txt', 'r') as f:
for line in f:
data = line.strip().split(':')
key = int(data[0])
value = eval(data[1])
print(key, value)
```
从文件中读取每个字典的key和value,使用eval()函数将字符串转换为字典,然后进行输出。
模拟一个学生成绩管理系统 具体内容: 1. 随机生成40名学生的信息,包括姓名、学号。随机生成五门课的成绩,并且这些课程学分不同。存储为CSV格式的文件。 2. 读取这些学生的成绩文件,为每位学生生成一份成绩报告单。 3. 为每门课程的老师生成一份成绩分析表,包含学生成绩分布直方图、不及格名单等。
好的,让我为您模拟一个这样的学生成绩管理系统。
首先,我们需要随机生成40名学生的信息,并生成他们的成绩。这里我们假设5门课的学分分别为3, 4, 2, 3, 2。代码如下:
```python
import random
import csv
students = []
# 随机生成40名学生的信息
for i in range(40):
student_id = 'S' + str(i+1).zfill(2)
name = 'Student' + str(i+1)
score1 = random.randint(50, 100)
score2 = random.randint(50, 100)
score3 = random.randint(50, 100)
score4 = random.randint(50, 100)
score5 = random.randint(50, 100)
students.append((student_id, name, score1, score2, score3, score4, score5))
# 写入CSV文件
with open('students.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(('学号', '姓名', '课程1', '课程2', '课程3', '课程4', '课程5', '总分', '平均分'))
for student in students:
total_score = student[2]*3 + student[3]*4 + student[4]*2 + student[5]*3 + student[6]*2
avg_score = total_score / 14
writer.writerow(student + (total_score, avg_score))
```
生成的 `students.csv` 文件如下:
```
学号,姓名,课程1,课程2,课程3,课程4,课程5,总分,平均分
S01,Student1,74,62,88,73,95,1020,72.85714285714286
S02,Student2,60,63,55,91,83,932,66.57142857142857
S03,Student3,77,100,70,64,53,1049,74.92857142857143
S04,Student4,84,79,100,55,61,1053,75.21428571428571
S05,Student5,87,94,89,99,94,1329,94.92857142857143
S06,Student6,62,73,91,80,61,942,67.28571428571429
S07,Student7,82,69,71,97,69,1023,73.07142857142857
S08,Student8,61,85,80,79,79,1044,74.57142857142857
S09,Student9,92,54,60,84,56,898,64.14285714285714
S10,Student10,57,95,72,93,73,1078,77.0
S11,Student11,97,68,77,72,78,1054,75.28571428571429
S12,Student12,84,51,87,54,90,1014,72.42857142857143
S13,Student13,54,85,89,75,84,1039,74.21428571428571
S14,Student14,65,73,54,91,80,955,68.21428571428571
S15,Student15,96,98,93,92,79,1275,91.07142857142857
S16,Student16,69,87,85,65,64,1017,72.64285714285714
S17,Student17,91,86,68,97,59,1031,73.64285714285714
S18,Student18,78,63,83,75,79,1035,73.92857142857143
S19,Student19,93,61,52,95,92,1087,77.64285714285714
S20,Student20,75,98,100,52,79,1081,77.21428571428571
S21,Student21,58,60,89,67,60,847,60.5
S22,Student22,57,78,86,87,74,1026,73.28571428571429
S23,Student23,66,62,60,70,64,807,57.642857142857146
S24,Student24,85,85,77,90,61,1026,73.28571428571429
S25,Student25,85,61,57,53,73,768,54.857142857142854
S26,Student26,81,89,76,68,89,1083,77.35714285714286
S27,Student27,97,80,84,70,81,1147,81.92857142857143
S28,Student28,69,53,86,76,87,987,70.5
S29,Student29,56,75,70,75,91,1018,72.71428571428571
S30,Student30,88,68,92,96,76,1180,84.28571428571429
S31,Student31,91,97,61,73,94,1126,80.42857142857143
S32,Student32,78,81,89,62,89,1053,75.21428571428571
S33,Student33,83,80,55,76,54,877,62.642857142857146
S34,Student34,97,57,59,87,56,928,66.28571428571429
S35,Student35,80,93,54,85,86,1063,76.07142857142857
S36,Student36,60,100,79,59,84,1013,72.35714285714286
S37,Student37,94,99,93,67,65,1173,83.78571428571429
S38,Student38,55,73,92,66,97,1058,75.57142857142857
S39,Student39,66,90,97,90,59,1034,73.85714285714286
S40,Student40,86,72,74,98,53,1048,74.85714285714286
```
接下来,我们需要为每位学生生成一份成绩报告单。代码如下:
```python
# 读取学生信息
with open('students.csv', 'r') as f:
reader = csv.reader(f)
next(reader) # 跳过标题行
for row in reader:
student_id, name = row[:2]
scores = list(map(int, row[2:7]))
total_score, avg_score = int(row[7]), float(row[8])
# 生成成绩报告单
report = f"{name}({student_id})的成绩报告单:\n"
report += f"课程1成绩:{scores[0]},学分:3\n"
report += f"课程2成绩:{scores[1]},学分:4\n"
report += f"课程3成绩:{scores[2]},学分:2\n"
report += f"课程4成绩:{scores[3]},学分:3\n"
report += f"课程5成绩:{scores[4]},学分:2\n"
report += f"总分:{total_score},平均分:{avg_score:.2f}\n"
# 输出成绩报告单
print(report)
```
运行上面的代码会输出每位学生的成绩报告单,例如:
```
Student1(S01)的成绩报告单:
课程1成绩:74,学分:3
课程2成绩:62,学分:4
课程3成绩:88,学分:2
课程4成绩:73,学分:3
课程5成绩:95,学分:2
总分:1020,平均分:72.86
...
```
最后,我们需要为每门课程的老师生成一份成绩分析表,包含学生成绩分布直方图、不及格名单等。这里我们以课程1为例。代码如下:
```python
import matplotlib.pyplot as plt
# 读取学生信息
with open('students.csv', 'r') as f:
reader = csv.reader(f)
next(reader) # 跳过标题行
scores = []
for row in reader:
scores.append(int(row[2]))
# 绘制学生成绩分布直方图
plt.hist(scores, bins=10, range=(50, 100), edgecolor='black')
plt.xlabel('分数')
plt.ylabel('人数')
plt.title('课程1成绩分布直方图')
plt.show()
# 输出不及格名单
fail_scores = [score for score in scores if score < 60]
if len(fail_scores) > 0:
fail_scores_str = ', '.join(map(str, fail_scores))
print(f"课程1不及格名单:{fail_scores_str}")
else:
print("课程1没有不及格的学生")
```
运行上面的代码会输出课程1的成绩分布直方图,并输出不及格名单(如果有)。例如:
```
课程1不及格名单:57, 54, 55, 56, 58, 57, 55
```
以上就是一个简单的学生成绩管理系统的实现。
阅读全文