1

タスクがあります:

私は0、1、2、...、1023の番号が付いたライトのボードを持っています。
各ライトはオンまたはオフのいずれかになります。すべてのライトは最初はオフになっています。

ステップ1:

0から始まるすべてのライトを反転します
。この時点で、すべてのライトがオンになっています。

ステップ2:0から始めて、毎秒ライトを反転
します。この時点で、ライト0、2、4、6、8、...はオフになっています。
ライト1、3、5、7、9、...はまだ点灯しています。

ステップ3:0から始めて3つおきにライトを反転し
ます。したがって、ライト0、3、6、9、12、...
を反転します。つまり、ライトがオンの場合はオフに反転します。
ライトがオフの場合は、オンにします。

..。

ステップ1023:
0から始めて1023番目のライトごとに反転し
ます。したがって、0と1023を反転します。

質問:この時点で、どのライトがオンで、どれがオフですか?



そしてここに私のコードがあります:

class Light:

    def __init__(self):
        self.state = 'OFF'

    def turn_on(self):
        self.state = 'ON'

    def turn_off(self):
        self.state = 'OFF'

    def flip(self):
        if self.state == 'OFF':
            self.state = 'ON'
        else:
            self.state = 'OFF'

    def __str__(self):
        return str(self.state)


class LightBoard:

    def __init__(self, num_lights):
        self.light = [Light()] * num_lights

    def step(self,i):
        for element in self.light:
            if self.light.index(element) % i == 0:
                self.light[self.light.index(element)] = self.light[self.light.index(element)].flip()

    def all_steps(self):
        i = 0
        while i != len(self.light):
            self.light = self.light.step(self.light, i)
            i += 1

    def __str__(self):
        return str(self.light)



Pythonビジュアライザーを使用したところ、LightBoardのall_stepsが機能しないことがわかりました。

AttributeError:'list'オブジェクトに属性'step'がありません

私はそれを修正することに迷っています。
私のコードの修正/コメントの提供を手伝ってください。ありがとうございました!

4

1 に答える 1

1

1つの問題は

    self.light = [Light()] * num_lights

これをに変更する必要があります

    self.light = [Light() for _ in range(num_lights)]

それ以外の場合self.lightは、同じLightオブジェクトへの参照で構成されます。

次のような他の問題があります。

  1. 1つだけでなく、2つのレベルのループが必要です。
  2. 以下にいくつかのエラーがありますself.light = self.light.step(self.light, i)。1つの問題は、リストであるを呼び出していることですstepself.light

PSこのためのプログラムを作成する必要がありますか?これは、ペンと紙を使用してかなり簡単に解決できる問題の1つです。

于 2013-01-26T13:45:10.600 に答える