【问题标题】:generating card deck Python 3生成卡片组 Python 3
【发布时间】:2017-09-26 12:41:06
【问题描述】:

我目前正在尝试编写一个(饮酒)游戏,名为:乘坐公共汽车。我现在的问题不一定在于对游戏进行编程,而是生成一副没有任何重复的纸牌。我在这个论坛上到处找它,但我发现的唯一东西是如何生成随机卡片,而不是如何排除重复卡片。这是我现在用于生成卡片的代码:

    suitnum = ["spade","club","heart","diamond"]
    cardnum = [2,3,4,5,6,7,8,9,10,"jack","queen","king","ace"]

    suit1 = random.choice(suitnum)
    card1 = random.choice(cardnum)

现在,对于游戏中的每一轮,我以相同的方式生成一张新牌,只是每轮的花色和牌名都不同。我将之前生成的卡片带入每一轮(每一轮都是单独的 def),因为我需要它们。我现在的问题是这段代码允许发生重复。我想找到一种方法,在程序开始时基本上生成一个“洗牌”的牌组,并且在每一轮中都能够参考该牌组并拿到牌组的顶牌。我认为这将是解决问题的最简单方法。有没有人有任何想法如何编码,或者可能有更简单的方法来解决我的问题?

【问题讨论】:

  • 您可以使用 set 类来插入您已经获得的卡片,因为 set 类是唯一对象的集合,如果您尝试添加现有卡片,您得到一个例外。

标签: python


【解决方案1】:

生成卡片列表,然后每次取出一个随机元素:

import random

suits = ["spade", "club", "heart", "diamond"]
faces = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]

cards = []
for suit in suits:
    for face in faces:
        cards.append((suit, face))

那么,每次你需要一张新卡时:

random.shuffle(cards)
card = cards.pop() # or: suit, face = cards.pop()

【讨论】:

    【解决方案2】:

    我建议使用您当前的 suitnumcardnum 数组来生成一个实际的卡片组,您可以从中随机选择卡片。这样,您就可以在从阵列中拾取卡片时删除它们。

    deck = []
    for suit in suitnum:
        for card in cardnum:
            deck.append(suit + ' ' + str(card))
    
    selection = random.choice(deck)
    deck.remove(selection)
    suit1 = selection.split()[0]
    card1 = selection.split()[1]
    

    【讨论】:

    • 感谢您的回答。 selection.split() 命令的作用是什么?
    • 它在空格上拆分'suit card'字符串并返回一个带有[suit, card]的数组
    【解决方案3】:

    感谢您的帮助,我想出了一个适合我的方法。我创建了一个如下所示的 def:

        def carddraw():
            suits = ["spade","club","heart","diamond"]
            faces = [2,3,4,5,6,7,8,9,10,"jack","queen","king","ace"]
    
            deck = []
            for suit in suits:
                for face in faces:
                    deck.append((suit, face))
    

    在我需要抓牌的每个 def 中,我都会参考牌组,要求一张牌,然后将其分成花色并再次面对(我在游戏中需要)。看起来像这样:

        card = random.choice(deck)
        deck.remove(card)
        suit1, face1 = card
    

    现在每次我需要在不同的 def 中取另一张牌时,我只需将 suit1 和 face1 的变量名更改为 suit2 和 face2 等。

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2022-11-15
      相关资源
      最近更新 更多