Я пытался изучить объектно-ориентированное программирование на Python и хотел бы начать с программирования карточных игр. Я собираюсь попробовать кодировать несколько разных игр, поэтому я хотел начать с класса колоды, который можно было бы вызывать для любой игры, которую я пытаюсь создать.
Я могу получить базовое поведение через функции, и я понятия не имею, как превратить его в класс. Я впервые придумал это:
class Deck:
def shuffle():
cards = []
suits = ['H', 'D', 'S', 'C']
for suit in suits:
for i in range(1, 14):
cards.append((i, suit))
shuf_deck = random.sample(cards, len(cards))
return shuf_deck
Вышеупомянутое работает, но это просто не очень хорошо. Во-первых, это просто функция, которая делает две вещи: создает колоду и тасует ее; кажется, они должны быть различны. Похоже, создание колоды для начала — хорошая работа для функции __init__
. Основываясь на другом вопросе, я собрал это вместе:
class Deck:
def __init__(self):
self.suits = ['Hearts', 'Diamonds,' 'Spades', 'Clubs']
self.values = range(1, 14)
self.cards = []
for Card in itertools.product(self.suits, self.values):
self.cards.append(Card)
def shuffle():
# Not quite sure what to do here yet
return self.cards
deck = Deck()
print(deck)
Но это не работает. Код внутри функции __init__
успешно создает колоду, но я не могу ее "объективировать". Я пробовал это несколькими разными способами, и он либо возвращает что-то вроде <__main__.Deck object at 0x7f56969f5630>
, что, как я полагаю, является адресом памяти самого объекта, либо я получаю какую-то ошибку, недопустимый синтаксис, ошибку атрибута и т. д. Я не могу показаться получить данные от __init__
; когда я пытаюсь вернуть данные непосредственно из __init__
, я получаю сообщение об ошибке, и всякий раз, когда я пытаюсь получить эти данные из другого метода в классе, я также получаю ошибки. Может ли кто-нибудь сказать мне, что мне не хватает?
<__main__.Deck object at 0x7f56969f5630>
— это представление вашего объектаDeck
. Теперь вопрос в том, что вы хотите сделать с объектом колоды. Вы можете реализовать метод для его перемешивания и один для повторения его карт и т. д. - person zvone   schedule 20.08.2018