У меня в настоящее время есть код для создания колоды карт, для перетасовки колоды и создания руки из этой колоды.«Pop index out the range» для колоды карт
from random import randint
def make_deck():
deck = []
for suit in suits:
for rank in ranks:
deck.append((suit,rank))
return deck
suits = ['spades','hearts','diamonds','clubs']
ranks = ['ace','two','three','four','five','six','seven','eight','nine','ten','jack','queen','king']
deck = make_deck() #list of cards
def shuffle(deck):
for k in range(100): # do it 100 times
card = deck.pop(randint(0,51))
deck.append(card)
def make_hand():
hand = []
for k in range(2):
card = deck.pop(randint(0,51))
hand.append(card)
return hand
hand = make_hand()
Когда я запускаю программу, печать deck
даст мне список карт, как мне нравится, и тогда, когда я пытаюсь тасует колоду, я получаю ошибку о том, что индекс популярности находится вне диапазона. Не совсем уверен, почему он окажется вне индекса, так как диапазон (0,51) представляет все 52 карты колоды.
Такая же ошибка возникает при попытке использовать функцию make_hand()
, хотя и не всегда. Я неправильно использую метод pop
? Что мне нужно изменить, чтобы работала функция shuffle
, и hand
всегда будет возвращать две разные карты из колоды?
Как еще один ответ указывает, что вы не добавляете карты после того, как делаете руку, я предполагаю, что это преднамеренное поведение, но вы забываете перестроить колоду, прежде чем перетасовывать карты? Это поможет показать поток того, как их называют. – SuperBiasedMan
Вы уверены, что у вашей колоды действительно есть 52 карты? (Попробуйте: напечатайте len (колода) после вызова make_deck().) Проблема с форматированием в вашем коде - две циклы «for» не работают, как показано из-за отступа. Интересно, возвращаетесь ли вы с неправильного места. (Когда я исправляю отступы второго «за» и запускаю его сам, я не получаю ошибок.) –
О, ничего себе. У колоды только 50 карт. Теперь я еще более смущен! (Кроме того, отступы верны сами по себе, я просто не форматировал их правильно, когда я копировал их на SO.) –