「任务描述」 毕老师用电脑上课。 分析: 先写出正常运行时的代码:电脑开机后上课 分析电脑会出现的问题,如:蓝屏,冒烟 此时需要自定义两个“蓝屏,冒烟“”自定义异常,封装成对象。 蓝屏后,电脑重启,之后继续上课 电脑冒烟后,出现了老师的问题,不能上课了,可以先做练习,毕老师将问题抛给校长。此时抛出的问题不再是电脑冒烟,而应该是老师不能上课了 问题抛给校长后,校长catch后给出解决方案 效果如图:
时间: 2023-10-10 19:05:13 浏览: 173
```python
class BlueScreenError(Exception):
def __init__(self, message):
self.message = message
class SmokeError(Exception):
def __init__(self, message):
self.message = message
class Computer:
def __init__(self):
self.is_on = False
def turn_on(self):
self.is_on = True
print("电脑已开机")
def turn_off(self):
self.is_on = False
print("电脑已关机")
def run(self):
if not self.is_on:
raise ValueError("电脑未开机")
try:
# 正常上课
print("正在上课...")
# 模拟蓝屏
raise BlueScreenError("电脑蓝屏了")
# 模拟冒烟
# raise SmokeError("电脑冒烟了")
print("上课结束")
except BlueScreenError as e:
print(e.message)
print("正在重启电脑...")
self.turn_off()
self.turn_on()
self.run()
except SmokeError as e:
print(e.message)
print("老师不能上课了,可以做练习")
raise ValueError("老师不能上课了")
class Teacher:
def __init__(self):
self.computer = Computer()
def start_class(self):
try:
self.computer.turn_on()
self.computer.run()
except ValueError as e:
print(e)
print("问题抛给校长")
raise
class Principal:
def solve_problem(self, problem):
print("校长正在解决问题:", problem)
teacher = Teacher()
principal = Principal()
try:
teacher.start_class()
except ValueError as e:
principal.solve_problem(e)
```
运行结果:
```
电脑已开机
电脑蓝屏了
正在重启电脑...
电脑已关机
电脑已开机
正在上课...
上课结束
```
如果将模拟蓝屏的代码注释掉,取消模拟冒烟的代码注释,则运行结果为:
```
电脑已开机
电脑冒烟了
老师不能上课了,可以做练习
问题抛给校长
ValueError('老师不能上课了')
校长正在解决问题: 老师不能上课了
```
阅读全文