Я знаю, что об этом уже спрашивали, но я ищу более чистое решение, если оно есть. Я хочу отсортировать карточную комбинацию по масти и порядку.
Вот подходящая часть моего класса для колоды:
import card
import random
class Deck:
def __init__(self):
suits = ["Hearts", "Diamonds", "Clubs", "Spades"]
values = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" ,"A"]
self._cards = [card.Card(suit, value) for suit in suits for value in values]
def deal_hand(self):
hand = random.sample(self._cards, 5)
for card in hand:
self._cards.remove(card)
hand.sort(key=lambda x: (x.suit, x.value))
return hand
Вот мой класс карт:
class Card:
def __init__(self, suit, value):
self.suit = suit
self.value = value
def __repr__(self):
return f"{self.value} of {self.suit}"
Однако, когда я смотрю на руки игроков, они сортируются только по масти, а не по стоимости.
Вот вывод, который я получаю:
John's hand: [10 of Clubs, 2 of Clubs, A of Hearts, 9 of Spades, J of Spades]
Arnold's hand: [K of Clubs, 8 of Diamonds, 7 of Hearts, 9 of Hearts, 7 of Spades]
Alex's hand: [Q of Clubs, 2 of Hearts, 5 of Hearts, 8 of Spades, K of Spades]
Morgan's hand: [5 of Clubs, A of Diamonds, 10 of Hearts, Q of Hearts, 2 of Spades]
, где 10 из клубов предшествует 2 из клубов. Кроме того, К х будет предшествовать Q х.
Почему моя лямбда сортируется только по костюму? Я бы по крайней мере ожидал, что 10 из Клубов придут после 2 из Клубов.
Есть ли чистый раствор?