将键盘输入的学生信息(包括学号 姓名和成绩)逐行写入文件Student.dat,当输入exit时结束。 统计文件 Student.dat中包含的学生数,以及平均分、最高分和最低分。 程序检查成绩输入值,如果不是数值信息,或是负的数值信息,或超过成绩范围 (100),抛出相应的异常。在抛出异常之前应提供详细的信息说明,从而使使 用该程序的用户了解所出现的问题,同时考虑上述异常出现时程序应该如何处理。
时间: 2024-03-02 22:52:05 浏览: 62
好的,我会解答你的问题。这是一个涉及文件读写和异常处理的程序,下面是程序的实现思路:
1. 使用while循环,不断读取键盘输入的学生信息,直到输入exit为止。
2. 将每个学生的信息逐行写入Student.dat文件中,使用文件流实现。
3. 使用try-except语句捕获可能出现的异常情况,如输入非数字字符、输入负数或超出成绩范围等。
4. 在出现异常时,使用raise语句抛出相应的异常,并提供详细的错误信息。
5. 统计文件中包含的学生数、平均分、最高分和最低分,使用文件流读取Student.dat文件中的数据,计算出相应的统计结果,并输出到屏幕上。
下面是Python代码实现:
```python
class ScoreOutOfRange(Exception):
def __init__(self, score):
self.score = score
def __str__(self):
return "成绩超出范围: {}".format(self.score)
class InvalidScore(Exception):
def __init__(self, score):
self.score = score
def __str__(self):
return "无效的成绩: {}".format(self.score)
def write_student_info():
with open("Student.dat", "w") as f:
count = 0
total_score = 0
max_score = -1
min_score = 101
while True:
input_str = input("请输入学生信息(学号 姓名 成绩): ")
if input_str == "exit":
break
try:
student_info = input_str.split()
if len(student_info) != 3:
raise ValueError("输入格式错误")
score = int(student_info[2])
if score < 0 or score > 100:
raise ScoreOutOfRange(score)
count += 1
total_score += score
max_score = max(max_score, score)
min_score = min(min_score, score)
f.write(input_str + "\n")
except ValueError as e:
print("输入格式错误: ", e)
except ScoreOutOfRange as e:
print("成绩超出范围: ", e)
except InvalidScore as e:
print("无效的成绩: ", e)
if count > 0:
print("学生数: ", count)
print("平均分: ", total_score / count)
print("最高分: ", max_score)
print("最低分: ", min_score)
if __name__ == "__main__":
write_student_info()
```
在这个程序中,我们定义了两个异常类:ScoreOutOfRange和InvalidScore,分别用于处理成绩超出范围和无效成绩的情况。在try-except语句中,我们捕获可能出现的异常情况,并使用raise语句抛出相应的异常,并在异常信息中提供详细的错误信息。在程序运行结束后,我们使用文件流读取Student.dat文件中的数据,计算出相应的统计结果,并输出到屏幕上。
希望我的回答能对你有所帮助!
阅读全文