Ради забавы я сделал эту функцию перетасовки колоды, чтобы имитировать c, как люди несовершенно перетасовывают колоду. Они разрезают его почти пополам и используют метод «ряби», чтобы переплести левую и правую колоды вместе, а затем повторяют процесс любое количество раз. Колода никогда идеально не сплетается вместе. Вы можете перетасовать их, как L1, L2, R1, L3, R2, L4, R3 и т. Д. c. или R1, L1, R2, R3, L2 и др. c. , Проблема в моем коде состоит в том, что последовательные перестановки никогда не переключают первую и последнюю карты колоды. Если в первом перетасовке смещение говорит, что ставим L1 на верх колоды, то у каждого перестановки также будет L1 наверху. Я переместил bias = random.random()
в while l oop, поэтому он должен каждый раз сбрасываться и, следовательно, иногда менять порядок. Является ли это каким-то странным экземпляром псевдослучайного и рекурсивного кода, который плохо воспроизводится вместе?
def shuffle_human(cards,reshuffle):
split = random.randint(-1*int(len(cards)/20),int(len(cards)/20)) #creates a bias to imperfectly split deck +- 5% of the deck size
L = cards[:int(len(cards)/2)+split] # creates left deck
R = cards[int(len(cards)/2)+split:] # creates right deck
D =[] # empty new deck
while len(D)< len(cards):
bias = random.random() # creates a bias to "incorrectly" choose
if L and bias <=.5: # which deck the next card will come from**strong text**
l = L.pop(0) # pops the card from the deck and appends it in.
print(l) # formatted this way so i can see whats going on
D.append(l)
if R and bias >.5: # same thing for right deck
r = R.pop(0)
print(r)
D.append(r)
print(D)
if reshuffle>0: # see if there are any reshuffles attempts needed
shuffle_perfect(D,reshuffle-1) # recursive call to reshuffle the deck.
shuffle_human(deck,3)
Проблематично c output
[0, 5, 6, 7, 8, 1, 9, 10, 2, 3, 4] # initial shuffle
[0, 1, 5, 9, 6, 10, 7, 2, 8, 3, 4] # reshuffle 1
[0, 10, 1, 7, 5, 2, 9, 8, 6, 3, 4] # 2
[0, 2, 10, 9, 1, 8, 7, 6, 5, 3, 4] # 3
Как вы можете видеть, он всегда имеет L1 и Ln- 1 или R1 и Rn-1 в качестве первой и последней цифры выходной деки, в зависимости от результата первого тасования. Независимо от того, сколько перестановок я делаю. Что я делаю неправильно?