如何操作一个顺序开启开关的接线板?Python 3x
我想要创建一个叫做 SwitchBoard 的类,具备以下功能:
当我创建一个开关板时,可以设置它包含的开关数量,所有开关一开始都是“关”的状态。
如果我打印开关板,它应该显示类似于:“以下开关是开着的:1 3 5 7 9”的内容。
如果我调用 switch(n),其中 n 是一个整数,它应该切换第 n 个开关的状态。
如果我调用 switch every(n),其中 n 也是一个整数,它应该切换每个第 n 个开关的状态。
我应该能够写一段全局代码,解决上述的开关问题。
这是我目前的工作,首先是类 LightSwitch
:
如果开关是开着的,它会切换并变为关。
如果开关是关着的,它会切换并变为开。
class LightSwitch():
def __init__(self, mode):
self.switch = mode
def __str__(self):
if self.switch == True:
return ("I am on")
if self.switch == False:
return ("I am off")
def turn_on(self):
self.switch = True
def turn_off(self):
self.switch = False
def flip(self):
if self.switch == True:
self.switch = False
else:
self.switch = True
对于类 SwitchBoard
,我现在有的代码是:
class SwitchBoard():
def __init__(self, n):
self.switches = []
for i in range(n):
self.switches.append(LightSwitch(False))
def switch(self, n):
self.switches[n].flip()
def switch_every(self, n):
for i in range(0,len(self.switches), n):
switch(i)
def __str__(self):
return "The following switches are on: " + str(self.switches)
if __name__ == ('__main__'):
my_light = LightSwitch(False)
my_light.flip()
print (my_light) # This prints "I am on"
my_light2 = LightSwitch(True)
my_light2.flip()
print(my_light2) # This prints "I am off"
my_switchboard = SwitchBoard(10) # This is the issue.
my_switchboard.switch_every(2)
print (my_switchboard)
这段代码没有成功,我正在使用一个列表来记录关着的开关数量,但我不确定如何写全局代码来解决这个问题,比如在一个序列中打开开关,或者可能缺少什么,请帮帮我。
1 个回答
2
要调用这个方法 switch
,你应该用 self.switch(i)
,而不是 switch(i)
:
def switch_every(self, n):
for i in range(0,len(self.switches), n):
self.switch(i) # <-- Change here
当你调用时,如果想要看到一些易读的输出,可以这样做:
print (my_switchboard)
把 LightSwitch.__str__
方法改成 LightSwitch.__repr__
:
def __repr__(self): # <-- Change `__str__` to `__repr__`
if self.switch == True:
return "I am on"
if self.switch == False:
return "I am off"
这是因为,当你打印一个列表的时候,它里面的内容会用 repr
的方式显示出来。
你可以把 LightSwitch.flip
方法简化成:
def flip(self):
self.switch = False if self.switch else True
使用一个 条件表达式。