首页 > 解决方案 > 囚箱问题,模拟解

问题描述

我正在尝试编写代码来模拟囚犯去标有他们号码的盒子,然后到里面的票也发送给他们的盒子,依此类推。

我收到列表索引超出范围错误但不确定代码是否正确

total = 0
for s in range(100):
    prisoners = []
    boxes = []
    counter = 0
    winners = 0
    number = 0

    for i in range(1, 101):
        prisoners.append(i)
    #print(prisoners)

    for x in range(1, 101):
        boxes.append(x)
        shuffle(boxes)
    #print(boxes)

    while counter!=99:
        for h in range(1, 51):  
            if prisoners[counter] == boxes[number]: 
                print("winner")
                winners +=1
                counter +=1
                break
            else:      
                number = boxes[number]
                print("loser")

标签: python-3.x

解决方案


问题是您将框编号存储为范围 [1,100],但将它们用作 100 长数组 (0-99) 的索引,因此当它运行时number = boxes[number],有时会将编号分配为 100 并导致错误。

解决它的一种方法是 make it number = boxes[number] - 1

另一种是在逻辑中使用 0-99 范围,但如果要打印它们,则添加 1。


推荐阅读