微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我是编程新手,因此决定使用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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?