索引函数错误,其中包含使用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
我希望代码也打印索引号,但它会显示“不在列表中”错误。
答案 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]