Создайте стандартную колоду из 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; после этого уже выданные карты не возвращаются автоматически.