如何在Python中使用属性和方法不确定

2024-10-03 17:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做一个作业,在一个特定的问题中,我必须拿出一张扑克牌列表,并使用一个类,找出它是否是Royal Flush。你知道吗

讲师提供了一个代码的“框架”,我必须在不改变他写的部分的情况下构建其余的代码。你知道吗

#Lecturer created...
class PokerHand(Hand):

    def __init__(self, cards = list()):
        Hand.__init__(self, cards)

        self.handRank = 0
        self.hand = "High Card"

        #I have so far added this part...
        total_value = 0
        val_card_b4 = 0
        for card in self.cards:
            if Card.getValue(card) > val_card_b4:
                total_value += Card.getValue(card)
                val_card_b4 = Card.getValue(card)
                checkRoyalFlush()
        #...to here. However it throws an error that checkRoyalFlush isn't defined.        

    #The lecturer then had what is below already added.
    def checkHand(self):

        if self.checkRoyalFlush():
            self.handRank = 9
            self.hand = "Royal Flush"
            print("Test")

我已经在前面的问题中创建了一个Card类,它允许我创建一张卡object获取卡的值(A=11, 2-10 equal face value etc.

我的问题是,一旦我检查了卡片,我就不知道如何“激活”方法中的if self.checkRoyalFlush():语句。你知道吗

我必须运行的代码是:

h1 = PokerHand([Card('hearts', '10'), Card('clubs', '10'),Card('hearts', '2'),Card('hearts', '3'),Card('spades', 'J')])
h1.show()
print(h1.checkHand())

我想了解如何让if语句工作,因为我花了很长时间研究,无法弄清楚它。我只是python的初学者,对它的面向对象方面还不熟悉。你知道吗

编辑:我也不知道如何定义“checkRoyalFlush”而不会出现更多错误


Tags: 代码selfifvaluevalcardh1cards
2条回答

if self.checkRoyalFlush():这样的if语句需要布尔数据类型作为结果,即TrueFalse。方法需要返回以下值之一:

#Lecturer created...
class PokerHand(Hand):

    def __init__(self, cards = list()):
        # etc...

    def checkHand(self):
        # etc...

    # add your new method below the methods that already exist
    def checkRoyalFlush(self):
        # paste your code to check if it is a royal flush here
        # if it is a royal flush, then:
            return True
        # if it is NOT a royal flush, then:
            return False

此外,还需要将方法称为self.checkRoyalFlush(),因为它是类PokerHand的一部分。你不能在checkHand()方法中这样做。你知道吗

看起来你的讲师想要一个名为checkRoyalFlush()的方法,我假设如果你的手是皇家同花顺的话,这个方法会返回true,如果你的手不是皇家同花顺的话,这个方法会返回false

还要注意的是,我不知道您如何设置您的card类,也不知道您将suit或value属性称为什么。在下面的代码中,我为suit属性调用.suit,为value属性调用.value。换成你自己做的。你知道吗

考虑以下代码:

class PokerHand:
    def __init__(self, cards = list()):
        #your init goes here as above

    def checkHand(self):
        #checkHand as above

    def checkRoyalFlush(self):          
        check_suit = cards[0].suit   #note I don't know what you are calling the suits and values in your hand, 
        values = ['A','K','Q','J','10'] #values we want to check against
        for each_card in cards:
            if not (each_card.typing == check_suit and each_card.value in values): 
                return False
            values.remove(each_card.value) #once we found a value we want to remove it from the possible list
        return True

方法checkRoyalFlush()将从卡片列表中取出一张卡片的套装。因为皇室同花顺必须有相同的套装,所以我选择哪张牌并不重要。在这里我选择列表中的第一张卡片。你知道吗

然后我遍历cards列表,检查是否每个卡片的类型都相同,以及是否每个值都在values列表中

如果有一张卡不符合要求,则返回False。你知道吗

我们删除检查过的值,这样就可以确保它是1个值而不是重复的值。 如果for循环检查在out返回False的情况下完成,我们就知道这是一个非常复杂的过程

请注意,这并不是最理想的方法,它只是一种方法,可以很清楚地说明如何做到这一点。你知道吗

相关问题 更多 >