【问题标题】:Assigning Location to Card in Simply Python Card Game在简单的 Python 纸牌游戏中为卡片分配位置
【发布时间】:2015-04-12 00:05:37
【问题描述】:

我正在做一个家庭作业来制作一个简单的纸牌游戏,但我不明白为什么我不能使用相同的方法来制作我的起始套牌并指定卡片的起始位置。我们不应该使用比列表和数组更复杂的东西(因为这就是我们迄今为止所学的全部内容)。

第一部分(构建套牌)工作正常。应该分配位置的第二部分(“甲板”,稍后我将放入“玩家手”和“计算机手”的位置来处理卡片)不起作用,我不明白为什么我可以不要使用相同的方法。 我不断收到“列表索引超出范围”的错误,我不知道如何解决它。

    def startDeck():
       suitName = ("hearts", "diamonds", "spades", "clubs")
       rankName = ("Ace", "Two", "Three", "Four", "Five", "Six", "Seven",
           "Eight", "Nine", "Ten", "Jack", "Queen", "King")
       suitName = list(suitName)
       rankName = list(rankName)
       deck = []
       for suit in range(4):
            for rank in range(13):
                card_string = rankName[rank] + " of " + suitName[suit]
                deck.append(card_string)
       return deck

    def startCardLoc():
        deck = startDeck()
        locName = ("Deck")
        deck = list(deck)
        locName = list(locName)
        cardLoc = []
        for loc in range(52):
            for firstloc in range(1):
                loc_string = locName[loc]
                cardLoc.append(loc_string)
        return cardLoc

    print startCardLoc()

这是错误的回溯:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-1-6d73de457be8> in <module>()
     24     return cardLoc
     25 
---> 26 print startCardLoc()

<ipython-input-1-6d73de457be8> in startCardLoc()
     20     for loc in range(52):
     21         for firstloc in range(1):
---> 22             loc_string = locName[loc]
     23             cardLoc.append(loc_string)
     24     return cardLoc

IndexError: list index out of range

感谢您的任何帮助。

【问题讨论】:

  • 您的问题是您将locName 设置为("Deck")。你为什么这样做?
  • 另外,当您只迭代一项时,没有理由使用for 循环——例如range(1)。你甚至不使用变量firstloc
  • 另一件事:很明显你的意思是tuples,而不是arrays。我试图编辑这个,但被拒绝了。
  • 哦,我不知道。我对编程真的很陌生,我的教授只是让我感到困惑而不是帮助。
  • 我正在尝试将 52 张卡片中每一张的位置设置为“deck”,然后我将编写函数将 5 的位置分配为“玩家手牌”,将 5 的位置分配给“计算机手”,其余的将留在“甲板”中。我不确定执行此操作的最佳方法。这是有道理的,我不需要 for 循环。

标签: python list playing-cards


【解决方案1】:

您应该重新检查list()。你调用这个 Python 内置 4 次,在任何情况下似乎都没有必要。特别是,locName = list(locName) 将列表['D','e','c','k'] 分配给locName,这可能不是您想要的。该行也导致您的索引错误,因为稍后您尝试在 for 循环中通过 locName[51] 访问 locName[0]。

【讨论】:

  • 啊!谢谢!那讲得通。这不是我想要的。
【解决方案2】:

即使它有效,写起来会更pythonic:

for suit in suitName:

我不确定您想在第二部分中做什么,但您是否看过 random.choice 示例?

附:我正在使用答案,因为单行 cmets 对于不那么简短的解释是不实用的。

【讨论】:

  • 想解释一下-1吗?
  • 当然。如您所知,这个“答案”没有回答问题。我不买你的后记——这是一个非常简短的解释。
  • 即使它有效,写成更pythonic:for suit in suitName:我不确定你想在第二部分做什么,但你有没有看过random.choice例如?
  • @dbliss 我已将我的答案发布为评论。我觉得它的可读性差很多。
  • 你知道你可以在 cmets 中格式化代码,对吧?例如,this is code.
猜你喜欢
  • 2017-12-17
  • 2011-08-02
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2021-04-18
相关资源
最近更新 更多