囚箱问题,模拟解决方案

时间:2019-04-09 10:13:55

标签: python-3.x

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

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

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")

1 个答案:

答案 0 :(得分:0)

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

一种解决方法是将其设置为number = boxes[number] - 1

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