首页 > 解决方案 > 更改列表中每个第 n 个索引的值

问题描述

我想编写一些解决这个“谜题”的代码。

有 24 名囚犯,每个人都有自己的牢房。守卫想给一些囚犯一些空闲时间。由于所有牢房的门都关着,他走到每一扇门前,一一打开。第二次,他对每个第二扇门都这样做。第三次,每第三个门。他重复了 24 次。如果一扇门关闭,它就会打开。如果它被打开,它会被关闭。

我试图自己编写代码,但我无法让它工作。

这是我写的:

All_Doors = [True] * 24 # Closed = True, Open = False
for Door in All_Doors:
    for Guard in range(1,25):
        All_Doors[::Guard] = False if True else True

print(All_Doors)

我收到此错误:TypeError: can only assign an iterable

标签: pythonpython-3.xlistloopsfor-loop

解决方案


尝试这个:

All_Doors = [True] * 24 # Closed = True, Open = False
for Guard in range(1,25):
    for current_door in range(Guard,25,Guard):
        All_Doors[current_door-1] = not All_Doors[current_door-1]
print(All_Doors)

我的输出:

[False, True, True, False, True, True, True, True, False, True, True, True, True, True, True, False, True, True, True, True, True, True, True, True]

答案是有道理的,因为所有与其他数字平方的数字都是封闭的 - (1,4,9,16) 指数。因为它们有奇数个乘数。


推荐阅读