当循环运行时,为什么不能在列表中保留所有变量

2024-05-14 15:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

while not endgame:

        cardsOnTable = OnTable()

        faceUp1 = player1.dequeue()
        cardsOnTable.place('player1',faceUp1,False)

        faceUp2 = player2.dequeue()
        cardsOnTable.place('player2',faceUp2,False)


        print(str(cardsOnTable))
        size1 = player1.size()
        size2 = player2.size()
        print('Player1 : '+str(size1),'Player2 : '+str(size2))

        result = compareCard(faceUp1,faceUp2)
                   elif result == 0:
            print('WAR STARTS!!!')


                i = 0
                player1war = [] #a list for placing player1's card in war(cards on table)
                player2war = [] #a list for placing player2's card in war(cards on table)

                while i < nbWarCards:
                    faceDown1 = player1.dequeue()
                    player1war.append(faceDown1)
                    faceDown2 = player2.dequeue()
                    player2war.append(faceDown2)

                    i += 1

                for card in player1war:
                    cardsOnTable.place('player1',card,True)

                player1war.clear()

                for card in player2war:
                    cardsOnTable.place('player2',card,True)

                player2war.clear()

                            if player1.size() == 0 or player2.size() == 0:
            endgame = True

我的问题发生在我试图print(str(cardOnTable))当这个while循环第一次运行时,它会给我[AS | AH],这就是我想要的。但是,当这个while循环第二次运行时,它应该打印[A3 XX XX XX AS | AH XX XX XX A5],它只打印[A3 | A5]。你知道吗

这是我的class OnTable()

class OnTable:
    def __init__(self):
        self.__cards = []
        self.__faceUp = []


    def place(self,player,card,hidden):

        if player == 'player2':
            self.__cards.append(card)
            if hidden == False:
                self.__faceUp.append(False)
            elif hidden == True:
                self.__faceUp.append(True)
        elif player == 'player1':
            self.__cards.insert(0,card)
            if hidden == False:
                self.__faceUp.insert(0,False)
            elif hidden == True:
                self.__faceUp.insert(0,True)            

        #return self.__cards   
    def cleanTable(self):
        self.__cards.clear()
        self.__faceUp.clear()    


    def __str__(self):

        for i in range(len(self.__faceUp)):
            if self.__faceUp[i] == True:
                self.__cards[i] = 'XX'

        list1 = '['
        for item in self.__cards:
            list1 += (str(item)+' ')

        list1 = re.sub(' ', ' ', list1.strip())
        half = int(len(list1)//2)      
        list1 = list1[:half] + ' |' + list1[half:]

        return list1 + ']'     

我试着跟踪我的代码,发现在第二次player1.dequeue()之前self.__cards有所有变量,然后它就丢失了前面的所有变量。你知道吗

有人能告诉我怎么解决这个问题吗?谢谢


Tags: inselffalsetrueforcardcardsxx

热门问题