Представьте колоду списком 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 позволяет получить предсказуемый порядок для проверки.