值错误:列表.删除(x) :x不在列表中,尽管条件检查已通过

2024-05-15 18:29:07 发布

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

我一直在学习如何像计算机科学家一样思考,我遇到了这个错误。代码如下:

class Card:
    suitList = ["Clubs", "Diamonds", "Hearts", "Spades"]
    rankList = ["narf", "Ace", "2", "3", "4", "5", "6", "7", "8",
                "9", "10", "Jack", "Queen", "King"]

def __init__(self, suit=0, rank=2):
    self.suit = suit
    self.rank = rank

def __str__(self):
    return (self.rankList[self.rank] + " of " +
            self.suitList[self.suit])

def __cmp__(self, other):
    if self.suit == 1: return 1
    if self.suit > other.suit: return 1
    if self.suit < other.suit: return -1
    if self.rank > other.suit: return 1
    if self.rank < other.suit: return -1
    return 0

班级甲板: def初始化(自身): 自助卡=[范围(4)内的套装牌(套装,等级)范围(1,14)内的等级牌]

def __str__(self):
    s = ""
    for i in range(len(self.cards)):
        s = s + " "*i + str(self.cards[i]) + "\n"
    return s

def shuffle(self):
    import random
    nCards = len(self.cards)
    for i in range(nCards):
        j = random.randrange(i, nCards)
        self.cards[i], self.cards[j] = self.cards[j], self.cards[i]

def removeCard(self, card):
    if card in self.cards:
        self.cards.remove(card)
        return True
    else:
        return False

def popCard(self):
    return self.cards.pop()

def isEmpty(self):
    return (len(self.cards) == 0)

def deal(self, hands, nCards = 999):
    nHands = len(hands)
    for i in range(nCards):
        if self.isEmpty(): break
        card = self.popCard()
        hand = hands[i % nHands]
        hand.addCard(card)

班长(甲板): def初始化(self,name=“”): 自助卡= [] 姓名=名称

def addCard(self, card):
    self.cards.append(card)

def __str__(self):
    s = "Hand " + self.name
    if self.isEmpty():
        return s + " is empty\n"
    else:
        return s + " contains\n" + Deck.__str__(self)

班级纸牌游戏: def初始化(自身): 自动甲板=甲板() 自我装潢洗牌()

等级老手(手): def removeMatches(自身): 计数=0 原始卡片=自助卡[:] 对于原始卡片中的卡片: 匹配=卡(3-卡片套装, 卡片.等级) 如果匹配自助卡: self.cards.remove删除(卡片) self.cards.remove删除(匹配) 打印“手%s:%s匹配%s”%(姓名,卡,匹配) 计数=计数+1 返回计数

我的错误是:

Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
hand.removeMatches()
File "C:\Users\Lin\projects\thinkcs\cardgame.py", line 89, in  removeMatches
self.cards.remove(match)
ValueError: list.remove(x): x not in list

Tags: inselflenreturnifdefcardremove
1条回答
网友
1楼 · 发布于 2024-05-15 18:29:07

我在Card类的__cmp__()函数中看到一个问题-

def __cmp__(self, other):
    if self.suit == 1: return 1
    if self.suit > other.suit: return 1
    if self.suit < other.suit: return -1
    if self.rank > other.suit: return 1 # Are you sure you want to compare rank with suit?
    if self.rank < other.suit: return -1 # Are you sure you want to compare rank with suit?
    return 0

你确定要比较军衔和西装吗?也许这就是问题的根源?你知道吗

相关问题 更多 >