Моя функция сортировки для карточных карт сортирует только по масти, а не по стоимости. [Python] - PullRequest
1 голос
/ 13 марта 2019

Я знаю, что об этом уже спрашивали, но я ищу более чистое решение, если оно есть. Я хочу отсортировать карточную комбинацию по масти и порядку.

Вот подходящая часть моего класса для колоды:

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 из Клубов.

Есть ли чистый раствор?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...