展开全部
# 标有"#"的行是修改过的,对比一下看看。62616964757a686964616fe59b9ee7ad9431333335303565
class LightSwitch:
def __init__(self,condition):
self.is_on = condition
if not isinstance(condition,bool):
InvaildSwitchExpection = TypeError("it is not a right state".format(condition))
raise InvaildSwitchExpection
def turn_on(self):
self.is_on = True
def turn_off(self):
self.is_on = False
def filp(self):
if self.is_on == False:
self.is_on = True
else:
self.is_on = False
def __str__(self):
if self.is_on == True:
return "I am on"
else:
return "I am off"
class SwitchBoard(LightSwitch):
def __init__(self, number):
self._lights = []
for i in range(0, number):
i = LightSwitch(False)
self._lights.append(i)
def which_switch(self):
result = []
for i in range(0, len(self._lights)):
if self._lights[i].is_on == True:
result.append(str(i)) #
return result
def __str__(self):
result = self.which_switch() #
result_str = ','.join(result)
return 'The following switches are on: ' + result_str
def filp(self, n):
if self._lights[n] == False:
self._lights[n].is_on = True
else:
self._lights[n].is_on = False
def filp_every(self, n):
k = 0
while n * k <= len(self._lights) - 1:
if self._lights[n * k].is_on == False:
self._lights[n * k].is_on = True
else:
self._lights[n * k].is_on = False
k = k + 1
def reset(self):
for light in self._lights:
light.is_on = False #
light_board = SwitchBoard(10)
print(light_board)
light_board.filp_every(2)
print(light_board)
light_board.filp(2)
print(light_board)
light_board.reset()
print(light_board)
light_board.filp_every(1)
print(light_board)
有的代码可以写得更简洁,基类已经提供的服务(接口),在派生类中直接使用就可以了。下面的仅供参考。class LightSwitch:
def __init__(self,condition):
self.is_on = condition
if not isinstance(condition,bool):
InvaildSwitchExpection = TypeError("it is not a right state".format(condition))
raise InvaildSwitchExpection
def turn_on(self):
self.is_on = True
def turn_off(self):
self.is_on = False
def filp(self):
self.is_on = not self.is_on ##
def __str__(self):
if self.is_on == True:
return "I am on"
else:
return "I am off"
class SwitchBoard(LightSwitch):
def __init__(self, number):
self._lights = []
for i in range(number):
i = LightSwitch(False)
self._lights.append(i)
def which_switch(self):
result = []
for i in range(len(self._lights)): ##
if self._lights[i].is_on == True:
result.append(str(i)) #
return result
def __str__(self):
result = self.which_switch() #
result_str = ','.join(result)
return 'The following switches are on: ' + result_str
def filp(self, n):
self._lights[n].filp() ##
def filp_every(self, n):
k = 0
while n * k <= len(self._lights) - 1:
self.filp(n * k) ##
k = k + 1
def reset(self):
for light in self._lights:
light.turn_off() ##
light_board = SwitchBoard(10)
print(light_board)
light_board.filp_every(2)
print(light_board)
light_board.filp(2)
print(light_board)
light_board.reset()
print(light_board)
light_board.filp_every(1)
print(light_board)