我正在学习Python作为我的第一门语言,并从如何像计算机科学家一样思考的角度研究老处女游戏。我的代码进入了一个无限循环,我不明白为什么我发布了堆栈溢出。我被要求隔离问题并发布更少的代码(好的建议),我现在已经这样做了。你知道吗
问题是:最初,remove_matches
会正确地检测并删除除Aces之外的所有cards对象的匹配项。现在,我已经复制了一个小规模的问题,它似乎没有删除任何卡职级匹配。在下面的示例中,我使用了匹配的A和匹配的K。两个匹配都没有被检测到。你知道吗
class Card:
suite_list = ["Clubs", "Diamonds", "Hearts", "Spades"]
rank_list = ["narf", "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
# "narf" is being used as a placeholder for the zeroith item, to allow
# card#'s to match the index #'s
def __init__(self, suite = 0, rank = 0):
self.suite = suite
self.rank = rank
def __str__(self):
return self.rank_list[self.rank]+" of "+self.suite_list[self.suite]
class Deck:
def __init__ (self):
self.cards = []
for suite in range (4):
for rank in range (1, 14):
self.cards.append(Card(suite, rank))
def __str__ (self):
s = " "
for i in range (len(self.cards)):
s = s + " "*i + str(self.cards[i]) + "\n"
return s
def remove_card(self,card):
if card in self.cards:
self.cards.remove(card)
return True
else:
return False
class Hand(Deck):
def __init__ (self, name = " "):
self.cards = []
self.name = name
def __str__(self):
s = "Hand "+ self.name
return s+ " contains\n" + Deck.__str__(self)
def remove_matches(self):
count = 0
for card in self.cards:
match = Card(3 - card.suite, card.rank)
print card, " matches ", match
if match in self.cards:
self.cards.remove(card)
self.cards.remove(match)
print "Hand %s: %s matches %s" % (self.name, card, match)
count = 1
return count
Joes_hand = Hand("Joe")
Joes_hand.cards = [Card(1,1), Card(2,1), Card(1,13), Card(2,13)]
print Joes_hand
Joes_hand.remove_matches()
print
print Joes_hand
Joes_hand = Hand()
首先,我创建了一个名为Joe的玩家,他手上还没有任何卡片对象。你知道吗
Joes_hand.cards = [Card(1,1), Card(2,1), Card(1,13), Card(2,13)]
现在我给乔分配了4张牌。你知道吗
print Joes_hand
然后我印了乔的手,这样我们就可以看到他的卡片了。你知道吗
Hand Joe contains
Ace of Diamonds
Ace of Hearts
King of Diamonds
King of Hearts
Joes_hand.remove_matches()
这就是我遇到问题的地方。remove_matches
应该移除按等级和颜色匹配的卡片。这是可能的,因为rank和suite是我的Card
对象的内置属性。我在remove_matches
方法中添加了一个print语句:
print card, " matches ", match
,用于证明代码能够识别匹配的内容。但由于某种原因,它无法检测到匹配,即使它知道要寻找什么。因此,if语句:if match in self.cards:
后面的语句都没有执行。你知道吗
输出:
Ace of Diamonds matches Ace of Hearts
Ace of Hearts matches Ace of Diamonds
King of Diamonds matches King of Hearts
King of Hearts matches King of Diamonds
最后,我再次打印乔的手,以表明所有的卡都没有被删除。你知道吗
print
print Joes_hand
Hand Joe contains
Ace of Diamonds
Ace of Hearts
King of Diamonds
King of Hearts
下面是remove_matches
的另一个例子:
def remove_matches(self):
count = 0
for card in self.cards:
match = Card(3 - card.suite, card.rank)
print card, " matches ", match
if match in self.cards:
self.cards.remove(card)
self.cards.remove(match)
print "Hand %s: %s matches %s" % (self.name, card, match)
count = 1
return count
很抱歉,我的帖子太长了,我倾向于过度解释,但我想确保我分享了我所有的信息。我是不是漏掉了什么明显的东西?我已经挣扎了好几天了。任何想法都会有帮助。你知道吗
谢谢!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐