列表的print方法更改项目的值

时间:2015-06-15 21:04:09

标签: python list

打印list时遇到问题。 random_itemst_stac包含项目列表(cards)。 for循环中的元素和索引的打印效果很好,但是当我打印整个数组时,其他项目都有X设置 - 这很奇怪。

Card上课:

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)

这是创建列表列表的方法(super_matrix): random_items_stack包含CARD对象。 我还需要在行中显示最后一张卡片(其他卡片应隐藏 - repr

返回的X符号
def setup():

    super_matrix= [[],[],[],[],[],[],[],[],[],[]]

    for x in range(54):
        newItem= random_items_stack .pop()
        super_matrix[x%10].append(newItem)

    for y in range(10):
        for z in range(0, len(plansza[y])):
            if(z == (len(plansza[y])-1)):
                print('index:')
                print(y,z)
                print('showed:')
                plansza[y][z].hideCard(False)
                print(plansza[y][z])
            else:
                print('index:')
                print(y,z)
                print('hidden:')
                plansza[y][z].hideCard(True)
                print(plansza[y][z])
    print(super_matrix)

示例输出的片段:

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]]

1 个答案:

答案 0 :(得分:0)

来自此评论:

  

@ user2357112她是卡片组的初始化(其来源为random_itemst_stac):self .__ talia = 8 * [j(范围内的卡片(j)(1,14)]

这意味着您对random_itemst_stac中的相同卡片有多个引用。

您应该为随机堆叠中所需的每张卡片制作一个新的Card,而不是将列表相乘。

类似于:

self.__talia = [Card(j%13+1) for j in range(13*8)]

如果你想要每张卡1-13次,8次。