Проблема в том, что вы конвертируете cardNum в строку при некоторых обстоятельствах, поэтому ответ - прекратить это делать.Лично я бы назвал карту отдельным методом:
def cardName(cardNum):
if cardNum == 11:
return "jack"
elif cardNum == 12:
return "queen"
elif cardNum == 13:
return "king"
elif cardNum == 0:
return "ace"
return str(cardNum)
def dealPlayer():
cardSuit = random.randrange(1, 5) #Decide card suit#
if cardSuit == 1:
cardNum = random.randrange(0, 14) #Decide card num#
print ("Your first card is the", cardName(cardNum), "of clubs.")
del Clubs[cardNum]
Примечание: ваш random.randrange(0, 13)
был неверен, он не будет включать 13. Вы либо хотите использовать random.randrange(0, 14)
, либо использовать random.randint(0, 13)
.
Я думаю, вам также следует рассмотреть возможность использования наборов вместо списков для карт и колоды, поскольку удаление составляет списки O (1) против O (n).
Кроме того,То, как вы следите за вещами, тоже не идеально.Если Clubs
означает набор доступных карт, то вам действительно следует выбрать следующую карту из этого набора.Что-то вроде:
cardNum = random.choice(Clubs)
Конечно, вы должны быть осторожны и в выборе костюма.Вполне возможно, что не осталось клубов, и в этом случае вам придется выбирать по-другому.Я думаю, в идеале, вы должны оставить только колоду вместо отдельных списков для каждой масти.Вы можете использовать кортежи, чтобы помочь вам:
deck = set([])
for suit in ["clubs", "spades", "hearts", "diamonds"]:
for i in range(14):
deck.add((suit, i))
Затем удалите каждую карту из deck
по своему выбору, используя random.sample(deck, 1)[0]
:
>>> random.sample(deck, 1)[0]
('spades', 9)
(было бы здоровоесли бы вы могли использовать random.choice()
здесь, но он не принимает набор)