如何访问在类中初始化的列表

问题描述

我是编程新手,因此决定使用python创建纸牌游戏以了解更多信息。我相信我已经使我的代码变得不必要的复杂,并将自己编码到一个角落,因此我可以使用一些指导。我意识到我的代码有点后勤上的噩梦,因此我将尽一切可能提供的指导。

我正在创建一个高低游戏,其中有9叠纸牌可供选择。玩家选择任何一张纸牌,然后猜测从卡组中拉出的下一张纸牌会比他们选择的纸牌高还是低。无论它们是否正确,都会将新卡添加到所选堆栈的顶部。网格本身是一个称为表的列表,其中包含9张纸牌。牌组用完后,我想删除网格中的最后一叠并将其附加到我的牌组中,从而提供更多的牌来玩。

我的Deck类创建了我的牌组,并拥有改组,绘制,计数等逻辑

class Deck:
    def __init__(self):
        self.cards = []


    def build(self):
        for s in suits:
            for v in range(1,14):
                self.cards.append(Card(s,v))

    def show(self):
        print(self.cards)

    def shuffle(self):
        for i in range(len(self.cards) - 1,-1):
            r = random.randint(0,i)
            self.cards[i],self.cards[r] = self.cards[r],self.cards[i]

    def drawCard(self):
        return self.cards.pop()

    def countDeck(self):
        return len(self.cards)

    def getTopCard(self):
        print(self.cards[0])

我的Stack类包括用于添加,计数和删除堆栈的逻辑。

class Stack:
    def __init__(self):
        self.cards = []

    def __repr__(self):
        return "{}".format(self.cards)

    def add(self,card):
        self.cards.insert(0,card)

    def showStack(self):
        for card in self.cards:
            card.show()
    
    def countStack(self):
        return len(self.cards)

    def removeStack(self,card):
        self.cards.remove(card)
        deck.cards.append(card)

然后,我的安装程序类通过构建9个堆栈的网格来创建表

class Setup:
    def __init__(self,deck):
        self.table = []

    def buildStacks(self,deck):
        for s in range(9):
            stack = Stack()
            c = deck.drawCard()
            stack.add(c)
            self.table.append(stack)
        print(self.table)

在我的游戏课中,我有逻辑比较所选堆栈中的卡与从卡组中取出的新卡。我认为我应该在这里检查卡座是否已用完卡,并调用Stack.removeStack()方法出于测试目的,我设置了条件,如果牌组达到len 40,则删除最后一个堆栈。

    def compareCards(self,currCard,stackIndex):
        newCard = self.deck.drawCard()
        newCardVal = newCard.value
        choice = input("Higher or Lower?").capitalize()
        # get index of stack to add new card
        stackCount = self.setup.table[stackIndex].countStack()
        if choice == "Higher" and newCardVal < currCard:
            print("You Failed!",newCardVal," is lower than ",currCard)
           
        elif choice == "Lower" and newCardVal > currCard:
            print("You Failed!"," is higher than ",currCard)
            
        elif newCardVal == currCard:
            print("You Failed!"," is the same as ",currCard)
            
        else:
            print("You chose to go ",choice," on ",".")
            print("The new card you pulled was ",newCardVal)
            print("Nice!")
            self.round += 1
            print("Round: ",self.round)
        self.setup.table[stackIndex].add(newCard)
        print(self.setup.table)

        if self.deck.countDeck() == 40:
            crd = self.setup.table[-1]
            for c in crd:
                self.setup.table[-1].removeStack(c)
        print(self.setup.table)
        #continue game prompting for new stack choice
        self.stackMatches(deck,self.setup)

我遇到的错误是“ TypeError:'Stack'对象不可迭代”,与以下代码段中的for循环有关:

        if self.deck.countDeck() == 40:
            crd = self.setup.table[-1]
            for c in crd:
                self.setup.table[-1].removeStack(c)

我意识到删除逻辑一开始是不正确的,但是我仍然需要遍历list crd,并且不确定该问题的解决方法是什么,或者不确定如何重组代码以完成我仍然需要利用的代码最佳做法。我还尝试将for循环更改为以下内容,导致相同的错误

for c.cards in crd:
for c[0] in crd:

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...