私は 50 個のクリスマス ライトを 1 列に並べていますが、最初にプラグを差し込んだときは、すべてのライトが消えています。ライトは 1 つのボタンで制御され、ボタンを押すたびに、一部のライトの状態が反転します (つまり、オフの場合はオンに変わり、オンの場合はオフに変わります)。変化するライトの選択は、これまでにボタンが押された回数によって異なります。
- 1 回押すと、1 番目、2 番目、3 番目、4 番目、…、50 番目のライトの状態が変わります
- 2 回押すと、2 回目、4 回目、6 回目、… のライトの状態が変わります。
- 3 回目のプレスでは、3 回目、6 回目、9 回目、…、ライトの状態が変わります。
- 等
- n 回押すと、n のすべての倍数に対応するライトの状態が変わります。
任意の回数「n」回押した後に点灯しているライトを確認するにはどうすればよいですか?
ライトを表すブール配列を定義してみました。次の関数を書きました。
lightsarray = [False] * 50 ### All lights are off at start ###
def pressbutton(n):
count = 0
for count in range(0, n):
lightsarray[::int(n)] = [not y for y in lightsarray[::int(n)]]
count = count + 1
return lightsarray
現在、n = 1 の出力はTrue, True, True, True, True, True...
n = 2 の出力は次のとおりです。True, False, True, False, True, False...
ここまでは順調ですね。しかし、n = 3 の場合、私は期待していますTrue, False, False, False, True, True, True...
しかし、私は得ていますTrue, False, False, True, False, False...
配列の状態の割り当て/取得に問題があると思います。これを修正するにはどうすればよいですか? または、より良いアプローチがありますか?
--EDIT-- 皆様、ご回答ありがとうございます。変更を実装し、提案された出力を取得していますが、これがライトの期待される状態と一致するかどうかはわかりません。False = オフ、True = オンであることを念頭に置いて、最初の 5 つのライトを見てみましょう。これは期待されるものです:
0 プレスの場合、すべてオフです。
False, False, False, False, False...
1 回押すと、1 の倍数ごとにライトが反転します。
True, True, True, True, True...
2 回押すと、2 の倍数ごとにライトが反転します。
True, False, True, False, True...
2 番目と 4 番目のライトが切り替えられていることに注意してください。それ以外は変更されていません。
3 回押すと、3 の倍数ごとにライトが反転します。
True, False, False, False, True...
ただし、変更を行った後、たとえば、2 回押すとFalse, True...
notが返され、 True, False...
3 回押すと返されますTrue, True, False, False, False...
(最初に 2 つの True があります)。
これを修正するにはどうすればよいですか? それが理にかなっていることを願っています。