一个经典的数学谜题,取自代码 的问题陈述“有n个球首先关闭,首先打开所有的球。关闭每一个第二个灯泡,在第三轮中,每隔一个灯泡切换一次(如果灯泡熄灭则开启,如果灯泡开启则关闭);对于第i轮,您切换每一个灯泡;对于第n轮,您只需切换最后一个灯泡,找出n轮后有多少个灯泡。“Python范围函数步长大小列表分配超出范围的错误,模拟了一个谜题
我意识到问题本身有一个简明的解决方案,但我想模拟灯泡开关的问题。但随着步长增加,我遇到列表索引超出范围错误,我该如何处理这个错误?我希望只有在索引仍然有效时才能切换这些值。
def bulbSwitch(self, n):
"""
:type n: int
:rtype: int
"""
bulbs= [0]*n
step=0
for i in range(n):
step += 1
for s in range(0, n, step):
bulbs[s+i]=0 if bulbs[s]==1 else 1 #this line produces error
print bulbs
为什么'灯泡[S + I]'? – jonrsharpe
@jonrsharpe我不想每次都从灯泡[0]开始,当步长为2时,我想从灯泡[1]开始,步长为3,从灯泡[2]开始等。 – codeAligned
I明白,但为什么要添加当前回合的数量? – jonrsharpe