#python #class #methods
#python #класс #методы
Вопрос:
Я пытаюсь начать правильно использовать объекты, я собрал колоду карт, которая является моим объектом. Я хочу иметь возможность перетасовывать и сдавать карты из него. Однако я не могу понять, как заставить метод shuffle работать правильно или даже если это лучший способ сделать это.
import itertools
import random
class Deck:
'''Deck of cards to be used in a card game'''
def __init__(self):
self.faces = ['A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4','3', '2']
self.suits = ['c', 'd', 'h', 's']
self.cards = set(itertools.product(self.faces, self.suits))
def shuffle(self):
self.cards = random.shuffle(self.cards)
def deal(self):
card = self.cards.pop()
return card[0] card[1]
Использование;
deck = Deck()
deck.shuffle()
deck.deal()
Комментарии:
1. Следует использовать
list
вместоset
.2.
random.shuffle
изменяет список на месте; он возвращаетNone
, а не перетасованный список.3. Перечисление и перетасовка на месте работают. Спасибо, ребята
Ответ №1:
Sets
не упорядочены, вы могли бы использовать list()
для получения упорядоченной колоды. Кроме того, random.shuffle(l)
действует непосредственно на список и возвращает None
, поэтому вы перезаписываете список с помощью None
.
import itertools
import random
class Deck:
'''Deck of cards to be used in a card game'''
def __init__(self):
self.faces = ['A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4','3', '2']
self.suits = ['c', 'd', 'h', 's']
self.cards = list(itertools.product(self.faces, self.suits)) # ordered deck
# self.cards = set(itertools.product(self.faces, self.suits)) # unordered deck
def shuffle(self):
random.shuffle(self.cards)
def deal(self):
card = self.cards.pop()
return card[0] card[1]
Комментарии:
1.
set
Вообще в этом нет необходимости , посколькуproduct
не будет создаваться никаких дубликатов, которые необходимо удалять.2. ему нужен только один между
list
илиset
. В этом не было необходимостиlist(set( ... ))
, спасибо, что указали на это