将键盘输入的学生信息(包括学号 姓名和成绩)逐行写入文件 Studentdat,当输入exit时结束。统计文件Studentdat中包含的学生数,以及平均分、最高分和最低分。程序检查成绩输入值,如果不是数值信息,或是负的数值信息,或超过成绩范围(100),抛出相应的异常。在抛出异常之前应提供详细的信息说明,从而使使用该程序的用户了解所出现的问题,同时考虑上述异常出现时程序应该如何处理。
时间: 2024-03-21 09:40:17 浏览: 61
好的,我会为您解答这个问题。以下是 Python 代码实现:
```python
class ScoreOutOfRangeError(Exception):
pass
class ScoreNotANumberError(Exception):
pass
class ScoreNegativeError(Exception):
pass
def write_student_info():
with open('Studentdat', 'w') as f:
count = 0
total_score = 0
max_score = -1
min_score = 101
while True:
try:
info = input('请输入学生信息(学号 姓名 成绩): ')
if info == 'exit':
break
info_list = info.split()
if len(info_list) != 3:
raise ValueError('学生信息格式不正确')
student_id, name, score_str = info_list
try:
score = int(score_str)
if score < 0:
raise ScoreNegativeError('成绩不能为负数')
if score > 100:
raise ScoreOutOfRangeError('成绩超出范围')
except ValueError:
raise ScoreNotANumberError('成绩必须是数字')
f.write(f'{student_id} {name} {score}\n')
count += 1
total_score += score
max_score = max(max_score, score)
min_score = min(min_score, score)
except Exception as e:
print(f'发生错误: {str(e)}')
if count == 0:
print('没有学生信息被写入文件')
else:
average_score = total_score / count
print(f'共写入 {count} 条学生信息,平均分为 {average_score:.1f} 分,最高分为 {max_score} 分,最低分为 {min_score} 分')
write_student_info()
```
该程序通过 `write_student_info` 函数实现了键盘输入学生信息,并将其逐行写入文件 `Studentdat` 中。同时,程序还统计了文件中的学生数、平均分、最高分和最低分。
在输入学生信息时,程序会对成绩进行检查。如果成绩不是数值信息,或是负的数值信息,或超过成绩范围(100),就会抛出相应的异常,并提供详细的信息说明。程序会在抛出异常之前处理异常,从而使使用该程序的用户了解所出现的问题。
以上就是 Python 实现的代码,希望能够帮助到您!
阅读全文