Python 列表更改项目值的打印方法
我无法打印Python 列表更改项目值的打印方法,python,list,Python,List,我无法打印列表随机项目ST\U stac包含项目列表(卡片)。for循环中元素和索引的打印效果非常好,但当我打印整个数组时,其他项都设置了X,这很奇怪 卡片类别: class Card(object): def __init__(self, r=0): self.__rank=0 self.__hidden= False if type(r) == str: if r in 'J':
列表
<代码>随机项目ST\U stac包含项目列表(卡片
)。for循环中元素和索引的打印效果非常好,但当我打印整个数组时,其他项都设置了X,这很奇怪
卡片
类别:
class Card(object):
def __init__(self, r=0):
self.__rank=0
self.__hidden= False
if type(r) == str:
if r in 'J':
self.__rank = 11 # Jack
elif r in 'Q':
self.__rank = 12 # Queen
elif r in 'K':
self.__rank = 13 # King
elif r in 'A':
self.__rank = 1 # Ace
elif type(r) == int:
if 1 <= r <= 14:
self.__rank = r
def hideCard(self, val):
self.__hidden= val
def isCardHidden(self):
return self.__hidden
def setRank(self, r):
self.__rank = r
def getRank(self):
return self.__rank
def getValue(self):
"""(Jack, Queen, King = 10), Ace = 1, reszta 2-10"""
if self.__rank <= 10:
return self.__rank
else:
return 10
def __repr__(self):
if self.__hidden:
return "X".rjust(3)
else:
nameString = "blk A 2 3 4 5 6 7 8 9 10 J Q K" # 'blk' for blank, i.e. no karty
nameList = nameString.split()
return (nameList[self.__rank]).rjust(3)
示例输出的片段:
index:
0 0
hidden:
X
index:
0 1
hidden:
X
index:
0 2
hidden:
X
index:
0 3
hidden:
X
index:
0 4
hidden:
X
index:
0 5
showed:
9
index:
1 0
hidden:
X
index:
1 1
hidden:
X
index:
1 2
hidden:
X
index:
1 3
hidden:
X
index:
1 4
hidden:
X
index:
1 5
showed:
8
index:
2 0
hidden:
X
index:
2 1
hidden:
X
index:
2 2
hidden:
X
index:
2 3
hidden:
X
index:
2 4
hidden:
X
index:
2 5
showed:
J
index:
3 0
hidden:
X
[[ X, X, X, X, X, X], [ X, X, X, X, X, X], [ X, 2, X, 2, X, J], [ X, X, X, X, X, X], [ 2, X, X, X, X], [ X, X, X, X, X], [ J, X, X, X, X], [ X, X, X, X, X], [ X, X, X, X, J], [ X, X, X, X, 2]]
根据这一评论:
@user2357112 her是卡片组的初始化(随机项ST_stac的来源):self.\u talia=8*[范围(1,14)内j的卡片(j)]
这意味着您在随机的\u itemst\u stac中对同一张卡有多个引用
您应该为随机堆栈中所需的每张卡制作一张新的卡,而不是将列表相乘
比如:
self.__talia = [Card(j%13+1) for j in range(13*8)]
如果你想要每张卡片1-13,8次。你能邮寄吗“随机项目”未定义什么是plansza?是super_matrix吗?@Discriment是的,很抱歉我在翻译过程中犯了错误。我想真正的问题是,您希望复制的东西实际上并没有复制,所以您在两个数据结构中有相同的卡对象。当您在一个数据结构中更改卡时,更改在另一个数据结构中是可见的。是的,这绝对不是您所期望的复制。你会发现self.talia[0]就是self.talia[13]
,还有其他类似的问题。列表乘法仅复制引用;它不会复制实际的卡对象。您需要将其初始化为[范围(8)中的卡(j)用于范围(1,14)中的j)]
。
self.__talia = [Card(j%13+1) for j in range(13*8)]