毕老师用电脑上课。 分析: 先写出正常运行时的代码:电脑开机后上课 分析电脑会出现的问题,如:蓝屏,冒烟 此时需要自定义两个“蓝屏,冒烟“”自定义异常,封装成对象。 蓝屏后,电脑重启,之后继续上课 电脑冒烟后,出现了老师的问题,不能上课了,可以先做练习,毕老师将问题抛给校长。此时抛出的问题不再是电脑冒烟,而应该是老师不能上课了 问题抛给校长后,校长catch后给出解决方案 的代码和效果
时间: 2023-08-13 10:09:02 浏览: 76
正常运行时的代码:
```python
class Computer:
def __init__(self):
self.is_on = False
def turn_on(self):
self.is_on = True
def turn_off(self):
self.is_on = False
class Teacher:
def __init__(self):
self.computer = Computer()
def start_class(self):
self.computer.turn_on()
# 上课的代码
def end_class(self):
self.computer.turn_off()
teacher = Teacher()
teacher.start_class()
```
自定义异常对象:
```python
class BlueScreenError(Exception):
def __init__(self, message):
self.message = message
class SmokeError(Exception):
def __init__(self, message):
self.message = message
```
在代码中使用自定义异常:
```python
class Computer:
def __init__(self):
self.is_on = False
def turn_on(self):
self.is_on = True
def turn_off(self):
self.is_on = False
def run_program(self):
# 模拟电脑工作时出现蓝屏或冒烟
if random.random() < 0.5:
raise BlueScreenError("电脑蓝屏了!")
if random.random() < 0.5:
raise SmokeError("电脑冒烟了!")
class Teacher:
def __init__(self):
self.computer = Computer()
def start_class(self):
self.computer.turn_on()
try:
self.computer.run_program()
# 上课的代码
except BlueScreenError as e:
print(e.message)
self.computer.turn_on() # 重启电脑
self.start_class()
except SmokeError as e:
print("老师不能上课了!")
# 做练习
raise TeacherError("老师不能上课了!")
def end_class(self):
self.computer.turn_off()
class School:
def __init__(self):
self.teacher = Teacher()
self.principal = Principal()
def start_class(self):
try:
self.teacher.start_class()
except TeacherError as e:
print(e.message)
self.principal.solve_problem(e.message)
class Principal:
def solve_problem(self, problem):
# 给出解决方案
print("校长正在解决问题:{}".format(problem))
school = School()
school.start_class()
```
如果电脑出现蓝屏,会重启电脑后继续上课;如果电脑冒烟,老师不能上课,会抛出 TeacherError 异常,该异常会被 School 类的 start_class 方法捕获并抛给校长,由校长解决问题。
阅读全文