#python-3.x
#python-3.x
Вопрос:
Я создаю карточную игру «война» на python. В war вы делите все 52 карты на игроков. Проблема, с которой я сталкиваюсь, заключается в том, что когда один список костюмов становится пустым, происходит сбой программы. Я пытался решить эту проблему, сказав это suit = random.choice(poss_suits)
после except IndexError:
, но это не сработало. Есть какие-нибудь идеи?
Diamonds = ['Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King']
Hearts = ['Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King']
Spades = ['Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King']
Clubs = ['Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King']
poss_suits = [Diamonds, Hearts, Spades, Clubs]
player_deal = 52
while player_deal > 0:
try:
suit = random.choice(poss_suits)
if suit == Diamonds:
card = random.choice(Diamonds)
Diamonds.remove(card)
if suit == Hearts:
card = random.choice(Hearts)
Hearts.remove(card)
if suit == Spades:
card = random.choice(Spades)
Spades.remove(card)
if suit == Clubs:
card = random.choice(Clubs)
Clubs.remove(card)
Player.hand.append(card)
player_deal -= 1
except IndexError:
Комментарии:
1. Просто мысли: я бы реализовал пакет в соответствии с тем, как вы это делаете физически. 1) Сделайте колоду из четырех мастей. 2) перетасуйте его. 3) рассматривайте его как стек и открывайте сверху. Легко понять, легко кодировать и тестировать. Его можно использовать везде, где требуется колода карт. Примечание: карта — это запись [масти, значения].
Ответ №1:
Выполнение list.remove(card)
дает значение ошибки, если list
оно пустое. Вы имели дело с ошибкой IndexError, но не с ошибкой ValueError.
Ответ №2:
Вы можете просто добавить:
if suit == Diamonds and Diamonds:
Затем сделайте то же самое для других мастей. Другой лучший способ — использовать suit следующим образом:
player_deal = 52
while player_deal > 0:
try:
suit = random.choice(poss_suits)
if suit:
card = random.choice(suit)
suit.remove(card)
Player.hand.append(card)
player_deal -= 1
Это более упрощенный ответ, который выполняет свою работу.