Я хочу посмотреть, приводит ли стратегия, заключающаяся в том, что каждый заключенный сначала выбирает коробку со своим номером, а затем открывает коробку с номером, содержащимся в предыдущей (и т. д.), действительно приводит к успеху в 31% случаев. Таким образом, я хотел воссоздать стратегию на Python и повторить ее 1000 раз. (Обратите внимание, что я сохраняю результаты каждого испытания в списке для последующего суммирования, хотя я еще не суммирую их здесь).
import random
boxesnum = list(range(100)) #generate list of 100 boxes
outcomes = [] #create empty list to store outcome of each iteration
for i in range(1000): #iterate process 1000 times
random1 = list(range(100))
random.shuffle(random1) #generate list of numbers from 0 to 99 and shuffle them randomly
boxes = dict(zip(boxesnum,random1)) #create dictionary mapping each box to a number randomly shuffled
lastprisoner = 0 #initialize count of prisoners who successfully find their number in the boxes
for prisoner in boxesnum:
boxopen = prisoner #let prisoner start "opening" boxes from the one with his own number (prisoners numbered from 0 to 99)
boxesopened = 0 #initialize count for number of boxes opened by each prisoner
while boxesopened < 50: #let prisoner open up to 50 boxes
if boxopen == random1[boxopen]: #if the prisoner opens a box with his own number, skip to next prisoner and add 1 to count of successful prisoners
lastprisoner += 1
break
else:
boxopen = random1[boxopen] #next box the prisoner opens is box #(number contained in previous box)
boxesopened += 1 #update count of boxes opened by the prisoner
else:
print("All prisoners are dead!") #if prisoner has to open more than 50 boxes, stop iteration and all prisoners die
outcomes.append(0) #add 0 to list of outcomes of each trial
break
if lastprisoner == 100:
print("Success!")
outcomes.append(1) #if all prisoners are successful, add 1 to list of outcomes of each trial
print(outcomes)
Проблема в том, что он возвращает только неудачи (все заключенные умирают в каждом из 100 испытаний), в то время как реализованная стратегия должна иметь показатель успеха 31%.
Я действительно не могу понять, почему этот код не работает.
Может ли быть проблема с тем, как метод «перетасовывания» рандомизирует содержимое ящиков?
Примечание. Я новичок в Python и программировании в целом.
🤔 А знаете ли вы, что...
Python имеет богатую стандартную библиотеку, включая модули для работы с текстом, файлами и сетями.