0

我想构建一个具有以下属性的类 SwitchBoard:

  • 当我创建一个配电盘时,我应该能够设置它包含的开关数量所有开关都应该从“关闭”位置开始

  • 如果我打印一个总机,它应该打印以下内容:“以下开关已打开:1 3 5 7 9”

  • 如果我用 n 作为整数调用 switch(n),它应该获取第 n 个灯开关的状态

  • 如果我用 n 作为整数调用 switch every(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)

这行不通,我正在使用一个列表来附加关闭开关的数量,但我不确定如何编写全局代码来解决这个问题,例如在一个序列中打开开关,或者可能缺少某些东西, 请帮忙。

4

1 回答 1

2

要调用该方法switch,请使用self.switch(i)not 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

使用条件表达式

于 2013-01-26T15:58:00.097 回答