为什么我的索引代码找不到列表中的项目?

时间:2019-04-20 20:17:35

标签: python list loops indexing

索引函数错误,其中包含使用for循环和append方法创建的列表。

我是新手,所以我无法理解问题。

from random import shuffle
class Cards:
    suits = [ 'Spades' , 'Hearts' , 'Diamonds' , 'Clubs' ]
    faces = [ '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '10' , 'Jack' , 
              'Queen' , 'King' , 'Ace' ]   
    def __init__ ( self , suit , face):
        '''suit and value should be integers'''
        self.suit = suit
        self.face = face
    def __repr__(self):
        return ('{} of {}').format(self.faces[self.face]
                ,self.suits[self.suit])
class Deck:
    def __init__(self):
        self.deckoc = []
        self.shufdoc = []
        for x in range (4):
            for y in range (13):
                self.deckoc.append(Cards(x,y))
                self.shufdoc.append(Cards(x,y))      
        shuffle (self.shufdoc)    
while True:
    newhand = Deck()    
    c1 = (newhand.shufdoc.pop())
    c2 = (newhand.shufdoc.pop())
    print (c1,c2)
    print (newhand.deckoc.index(c1))    
    print (newhand.shufdoc)
    print (newhand.deckoc) 
    a = input('asd?')
    if a == 'q':
        break

我希望代码也打印索引号,但它会显示“不在列表中”错误。

2 个答案:

答案 0 :(得分:0)

您正在为每个卡创建两个独立的Card实例。因此in无法在另一个列表中找到一个列表的实例。

只需复制列表:

class Deck:
    def __init__(self):
        self.deckoc = []
        self.shufdoc = []
        for x in range (4):
            for y in range (13):
                self.deckoc.append(Cards(x,y))
        self.shufdoc = list(self.deckoc)
        shuffle(self.shufdoc)    

答案 1 :(得分:0)

有关您的逻辑问题,请参见@Daniel的回答。但我建议重做您的逻辑。没有理由拥有复杂的索引或两个不同的套牌。

这是我在制作的扑克程序中创建套牌的方式:

for _ in range(decks_):
    for val in (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14):
        for suit in ("Hearts", "Spades", "Clubs", "Diamonds"):
            self.cards.append(Card(val, suit))

    if self.shuffle_cards:
            shuffle(self.cards)

您没有多个牌组,因此不需要第一个for循环,除非您希望将来添加更多牌组。

您可以这样定义命名词典:

value_names = {2: 'Two', 3: 'Three', 4: 'Four', 5: 'Five', 6: 'Six', 7: 'Seven', 8: 'Eight', 9: 'Nine',
               10: 'Ten', 11: 'Jack', 12: 'Queen', 13: 'King', 14: 'Ace'}

suit_names = {"Hearts": '♥', "Spades": '♠', "Clubs": '♣', "Diamonds": '♦'}

然后这样定义您的卡类:

class Card:
    """A class containing the value and suit for each card"""
    def __init__(self, value, suit):
        self.value = value
        self.suit = suit
        self.vname = value_names[value]
        self.sname = suit_names[suit]