【发布时间】:2017-03-22 13:06:14
【问题描述】:
我创建了一个扑克牌对象,它具有等级、套件和二十一点值的某些属性。
二十一点值部分不断收到 TypeError,表示我无法在 list 和 int 的实例之间进行比较。我不确定如何解决(如何/如果我可以只比较列表的索引,然后根据它的索引给它二十一点值)?
if/elif 块属于 bjValue() 函数还是 init() 函数?
这是我的代码:
class Card:
"""playing card object where numeric rank, suit and blackjack values are stored"""
def __init__(self, rank, suit):
self.rank = rank
self.suit = suit
self.ranks = [None, "Ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"]
self.suits = {"d": "Diamonds",
"c": "Clubs",
"h": "Hearts",
"s": "Spades"}
def getRank(self):
"""returns the rank of the card"""
return self.rank
def getSuit(self):
return self.suits.get(self.suit)
def bjValue(self):
if self.rank > 1 or self.rank < 11:
self.value = self.rank
elif self.rank == "Ace":
self.value = 1
elif self.rank == "Jack" or self.ranks == "Queen" or self.ranks == "King":
self.value = 10
return self.value
def __str__(self):
return "%s of %s" % (self.ranks[self.rank], self.suits.get(self.suit))
c1 = Card(1,"s")
c2 = Card(11,"d")
print(c1) #expect Ace of Spades
print(c2) #expect Jack of Diamonds
c3 = Card(5,"c") #expect 5 of clubs
print(c3.getRank())
print(c3.getSuit()) #expect Five
print(c3.bjValue()) #expect 5
print(c3)
c4 = Card(1,"s")
print(c4)
编辑:所以,我修正了我的错字并且不再出现错误,但我仍然得到不正确的 Jack、Queen 和 King 牌的二十一点值(我将它们的二十一点值恢复为他们的等级,即使我有 if 语句),我不明白我的逻辑缺陷在哪里......
【问题讨论】:
-
你能分享一下确切的堆栈跟踪吗
标签: python class attributes comparison