Создание сущности колоды карт с возможностью поочередного извлечения

Создайте стандартную колоду из 52 сочетаний ранга и масти и извлекайте карты через pop. Поведение при пустой колоде задайте явно.

Короткий ответ

Что ответить на собеседовании

Создайте стандартную колоду из 52 сочетаний ранга и масти и извлекайте карты через pop. Поведение при пустой колоде задайте явно.

Подробный разбор

Ответ с пояснениями

Условие

Реализуй класс (или структуру) для представления колоды карт. При инициализации должна формироваться полная колода, а пользователь должен иметь возможность запрашивать карту, получая её одну за другой, пока колода не опустеет.

Ответ

Создайте стандартную колоду из 52 сочетаний ранга и масти и извлекайте карты через pop. Поведение при пустой колоде задайте явно.

class Deck:
    def __init__(self):
        suits = ('clubs', 'diamonds', 'hearts', 'spades')
        ranks = ('2', '3', '4', '5', '6', '7', '8',
                 '9', '10', 'J', 'Q', 'K', 'A')
        self.cards = [(rank, suit) for suit in suits for rank in ranks]

    def draw(self):
        if not self.cards:
            raise IndexError('Колода пуста')
        return self.cards.pop()

    def __len__(self):
        return len(self.cards)

Принята колода без джокеров; другой состав нужно оговорить. pop с конца имеет O(1) сложность. Если нужен случайный порядок, перед первым извлечением перемешайте self.cards через random.shuffle; после этого уже выданные карты не возвращаются автоматически.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее