Проблема свойств печати объекта Python ООП - PullRequest
0 голосов
/ 21 февраля 2019

Поэтому я работаю над карточной игрой, когда пытаюсь сформировать класс Pile, в котором я создал функцию для печати карточек в классе карточек и списка карточек в классе колоды.Когда я пытаюсь использовать функцию из класса карты (которая работала в других классах) в классе стопки, я не получаю ожидаемого результата.Как я могу это исправить?

Класс карты:

import random
from Enums import *

class Card:
    def __init__(self):
        self.suit = Suit.find(random.randint(1, 4))
        self.rank = Rank.find(random.randint(1, 14))

    def show(self):
        print (self.rank.value[1], "of", self.suit.value[1])

Класс кучи:

from Enums import *
from Card import *
from Hand import *

class Pile:
    def __init__(self):
        self.cards = []
        self.cards.append(Card())

    def discard(self, hand, card):
        self.cards.append(card)

        if (not searchCard(self, hand, card)):
            print ("The card was not found, please select another one or cheat")
            return True
        else:
            return False

    def takePile(self, hand):
        for x in self.cards:
            hand.cards.append(self.cards[x])

    def clearPile(self):
        while len(self.cards) > 0:
            self.cards.pop()

    def searchCard(self, hand, card):
        flag = False

        for x in hand.cards and not flag:
            if (hand.cards[x].rank.value[0] == card.rank.value[0]):
                if (hand.cards[x].suit.value[0] == card.suit.value[0]):
                    hand.cards[x].pop()
                    flag = True

        return flag

    def showCurrent(self):
        for x in self.cards:
            x.show()

Я имею в виду функцию show в классе Card и showCurrentи init в классе Pile

Когда я запускаю игру со строкой

print ("It's your turn now, the pile presents a", pile.showCurrent())

, вместо функции show в классе Card я получаю None следующим образом:

Теперь ваша очередь, куча дарит None

1 Ответ

0 голосов
/ 21 февраля 2019

Основная проблема заключается в том, что вы печатаете результат showCurrent(), который равен None.Чтобы это исправить, просто переместите вызов на showCurrent из print:

print("It's your turn now, the pile presents a")
pile.showCurrent()

Кроме того, вы можете изменить метод show на правильный метод __str__, чтобы сделать егоболее универсальный.Вам также придется изменить метод showCurrent:

# in class Card:
def __str__(self): # just return the formatted string here
    return "%s of %s" % (self.rank.value[1], self.suit.value[1])

# in class Pile:
def showCurrent(self): # print the string here
    for x in self.cards:
        print(x) # this calls str(x), which calls x.__str__()

Но ваше сообщение предполагает, что вы на самом деле просто хотите напечатать самую верхнюю карту, а не весь стек.С помощью __str__ вы можете сделать это прямо в вызове print:

print("It's your turn now, the pile presents a", pile.cards[0]) # calls __str__
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...