我在一条线上有一串 50 个圣诞灯,当它们第一次插上电源时,所有的灯都熄灭了。灯由单个按钮控制,每次按下按钮时,一些灯会翻转它们的状态(即,如果它们关闭,则变为打开;如果它们打开,则变为关闭)。改变的灯的选择取决于到目前为止按下按钮的次数:
- 第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 = OFF 和 True = ON,让我们看看前 5 个灯。这是预期的:
对于 0 次按下,一切都关闭:
False, False, False, False, False...
按下 1 次,每 1 的倍数处的灯都会翻转:
True, True, True, True, True...
对于 2 次按下,每 2 的倍数处的灯都会翻转:
True, False, True, False, True...
请注意,第二个和第四个灯已切换,否则其余保持不变。
对于 3 次按下,每 3 的倍数处的灯都会翻转:
True, False, False, False, True...
但是,在进行更改后,例如,按 2 次False, True...
不给出,按True, False...
3 次给出True, True, False, False, False...
(开始时有两个 True。)
我该如何纠正?我希望这是有道理的。