【问题标题】:How to operate a SwitchBoard that turns on the following switches within a sequence n? Python 3x如何操作在序列 n 内打开以下开关的 SwitchBoard?蟒蛇 3x
【发布时间】:2013-01-10 09:47:48
【问题描述】:

我想构建一个具有以下属性的类 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)

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

【问题讨论】:

    标签: python object loops boolean


    【解决方案1】:

    要调用方法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
    

    使用conditional expression

    【讨论】:

    • 在 SwitchBoard 类中,我想将整数而不是字符串附加到列表中,例如,我从 0 开始每隔三个开关翻转一次。所以我翻转开关 0、3、6、9、12。 ..也就是说,如果开关打开,我将其关闭。如果开关关闭,我将其打开。不是 ['I am on'、'I am off'.. 等等] 我不断收到 main 错误
    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 2016-02-22
    • 2022-12-18
    • 1970-01-01
    • 2017-08-05
    • 2021-03-07
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多