Создать объект колоды карт с возможностью выдачи карт

Представьте колоду списком 52 уникальных пар «достоинство, масть». Выдавайте карту удалением из списка; после исчерпания итератор должен поднимать StopIteration.

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

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

Представьте колоду списком 52 уникальных пар «достоинство, масть». Выдавайте карту удалением из списка; после исчерпания итератор должен поднимать StopIteration.

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

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

Условие

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

Ответ

Представьте колоду списком 52 уникальных пар «достоинство, масть». Выдавайте карту удалением из списка; после исчерпания итератор должен поднимать StopIteration.

Предположим стандартную колоду без джокеров:

import random

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

    def __iter__(self):
        return self

    def __next__(self):
        if not self.cards:
            raise StopIteration
        return self.cards.pop()

next(deck) выдаёт одну карту, а for перебирает остаток. Карты не повторяются, поскольку удаляются после выдачи. shuffle=False позволяет получить предсказуемый порядок для проверки.

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

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

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

Подробнее