0

次のプロパティを持つクラス SwitchBoard を作成したいと思います。

  • スイッチボードを作成するとき、スイッチボードに含まれるスイッチの数を設定できる必要があります。すべてのスイッチは「オフ」の位置から開始する必要があります。

  • 配電盤を印刷すると、「次のスイッチがオンになっています: 1 3 5 7 9」という行に沿って何かが印刷されるはずです。

  • n を整数として switch(n) を呼び出すと、n 番目のライトスイッチのステータスを ip する必要があります

  • n を整数として switch every(n) を呼び出すと、n 番目ごとのライトスイッチのステータスを ip する必要があります

上記のように、ライトスイッチの問題を解決するグローバル コードを書くことができるはずです。

これはこれまでの私の作業です。最初はクラスです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

メソッドを呼び出すには、 notswitchを使用します。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

条件式を使用します。

于 2013-01-26T15:58:00.097 に答える