我目前正在进行一项任务,在一个特定的问题中我必须拿一张扑克牌列表,并使用一个类来确定它是否是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():
方法中“激活”checkHand
语句。
我必须运行的代码是:
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'而不会出现更多错误
答案 0 :(得分:1)
if
语句(例如if self.checkRoyalFlush():
)需要布尔数据类型,即True
或False
。您的方法需要返回以下任一值:
#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()
方法中这样做。
答案 1 :(得分:1)
看起来你的讲师想要一种名为checkRoyalFlush()
的方法,如果你的手是皇家同花,我假设会返回true
或false
如果不是AREN'吨
另请注意,我不知道您如何设置卡片类,而且我也不知道您所称的套装或价值属性。在下面的代码中,我为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
列表并检查每个卡片的输入是否相同,以及每个值是否在值列表中
如果一张卡与要求不符,则返回False。
我们删除了我们检查的值,因此我们可以确保它的值为1而不是重复的值。 如果完成for循环检查而没有返回False,我们知道它是皇家同花顺
请注意,这不是最佳方式,它只是一种显示如何清晰完成的方式。