我一直渴望弄明白这一点,但我似乎可以'似乎让它发挥作用。
我有一个名为Deck的课程:
import random
class Deck(list):
'''
a list of cards represented in a deck
'''
def __init__(self):
''' a list of cards'''
list.__init__(self)
for i in range(52):
self.append(Card(i))
def isEmpty(self):
'''checks if Deck is empty or not; returns T or F'''
return self(len) == 0
def shuffle(self):
''' shuffles the list of cards in random order'''
return random.shuffle(self)
def deal(self, num):
'''creates a new list of cards from the deck.
Arguments:
num = an integer to assign how many cards to deal
Returns:
a new list of cards taken from the deck
'''
new = []
for i in range(num):
x = self.pop(0) #something to note, if instead "x = self.pop(i)"
new.append(x) #it will only take even card, and leave out odd cards
return new
def restore(self, lst):
'''restores the cards already taken from Deck
Arguments:
lst = a list of cards pulled out from Deck
Returns:
nothing; returns cards to the Deck
'''
while len(lst) > 0:
x = lst.pop(0)
self.append(x)
Class Deck是一个对象卡列表,它派生自名为Card的类。
现在我必须创建一个名为PinochleoDeck的类:
class PinochleDeck(Deck):
def __init__(self):
Deck.__init__(self)
x = 0
for i in range(4):
for i in range(7):
self.pop(x)
x += 6
它应该只能从所有套装的9到Ace获得套牌,这是24张牌。 但我还要制作所有卡片的两份副本,因此总共有48张卡片作为PinochleoDeck类。
我已经尝试了很多东西,比如itertools,copy,甚至是粗暴的乘法,但它们都没有奏效。如何在不创建新列表的情况下在列表中创建两个对象副本,以便PinocheloDeck类有48张卡?
由于
答案 0 :(得分:1)
在我看来,你只是在第一次只删除了一些卡片。要获得所有28张卡的一份副本,您需要在PinochleDeck类中添加一个新行。见下文:
class PinochleDeck(Deck):
def __init__(self):
Deck.__init__(self)
x = 0
for i in range(4):
for i in range(7):
self.pop(x)
x += 1 #NEED TO INCREMENT EVERY TIME THROUGH!!!
x += 6
要获得每份的两份副本,你可以这样做:
class PinochleDeck(Deck):
def __init__(self):
Deck.__init__(self)
x = 0
for i in range(4):
for i in range(7):
self.pop(x)
x += 1 #NEED TO INCREMENT EVERY TIME THROUGH!!!
x += 6
self.extend(self)
现在,这只有在你不关心同一个实例的多个副本时才会起作用(即你的牌不会改变,所以俱乐部的ace总是看起来完全一样)。如果您需要能够在不相互踩踏的情况下进行修改的副本,您需要在每张卡片上执行deepcopy
或使用Deck
课程{{1}退出}。我会选择:
__init__
答案 1 :(得分:0)
如果您有一个Card对象列表,则需要对列表进行深度查看:
from copy import deepcopy
要将它们添加到原始列表,请使用extend:
your_list.extend(deepcopy(your_list))
您也无法调用自我self(len)