Я начинаю с python. Подробности, которые я написал ниже.. Он переходит в бесконечный цикл и выдает мне ошибку, когда я пытаюсь вызвать функцию внутри себя.. Такая рекурсия не разрешена?
Код публикации ниже .. Спасибо за вашу помощь :)
Программа предполагает, что у нас 100 пассажиров садятся в самолет. Предполагая, что первый потерял посадочный талон, он находит случайное место и садится на него. Затем другие входящие пассажиры садятся на свои места, если они не заняты, или на другие случайные места, если они заняты. Конечная цель — найти вероятность того, что последний пассажир не сядет на свое место. Я еще не добавил часть петли, которая сделала бы ее правильной симуляцией. Приведенный выше вопрос на самом деле представляет собой загадку вероятности. Я пытаюсь проверить ответ, поскольку я действительно не следую рассуждениям.
import random
from numpy import zeros
rand = zeros((100,3))
# The rows are : Passenger number , The seat he is occupying and if his designated seat is occupied. I am assuming that the passengers have seats which are same as the order in which they enter. so the 1st passenger enter has a designated seat number 1, 2nd to enter has no. 2 etc.
def cio(r): # Says if the seat is occupied ( 1 if occupied, 0 if not)
if rand[r][2]==1:
return 1
if rand[r][2]==0:
return 0
def assign(ini,mov): # The first is passenger no. and the second is the final seat he gets. So I keep on chaning the mov variable if the seat that he randomly picked was occupied too.
if cio(rand[mov][2])== 0 :
rand[mov][2] = 1
rand[mov][1] = ini
elif cio(rand[mov][2])== 1 :
mov2 = random.randint(0,99)
# print(mov2) Was used to debug.. didn't really help
assign(ini,mov2) # I get the error pointing to this line :(
# Defining the first passenger's stats.
rand[0][0] = 1
rand[0][1] = random.randint(1,100)
m = rand[0][1]
rand[m][2]= 1
for x in range(99):
rand[x+1][0] = x + 2
for x in range(99):
assign(x+1,x+1)
if rand[99][0]==rand[99][1] :
print(1);
else :
print(0);
Пожалуйста, сообщите мне, если у всех возникает одна и та же ошибка.. ТАКЖЕ сообщите мне, если я нарушаю какие-либо правила, потому что это первый вопрос, который я публикую.. Извините, если это кажется слишком длинным.
Вот как это должно было быть... В этом случае код работает нормально со следующими модами:
def assign(ini,mov):
if cio(mov)== 0 : """Changed here"""
rand[mov][2] = 1
rand[mov][1] = ini
elif cio(mov)== 1 : """And here"""
mov2 = random.randint(0,99)
assign(ini,mov2)
Я использую Python 2.6.6 в Windows 7, используя программное обеспечение Enthought Academic Version of Python. http://www.enthought.com/products/getepd.php
Также ответом на эту загадку является 0,5, что на самом деле я получаю (почти), запуская ее 10000 раз.
Я не видел его здесь, но он должен был быть доступен в Интернете. "nofollow">http://www.brightbubble.net/2010/07/10/100-passengers-and-plane-seats/
print
как функции, а не оператора, ajrocker либо использует Python 3, либо одну из версий Python 2, поддерживающих синтаксис Python 3, а в случае Python 3range()
эквивалентен Python 2.xrange()
. - person JAB   schedule 27.05.2011