Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成卡片组Python 3_Python - Fatal编程技术网

生成卡片组Python 3

生成卡片组Python 3,python,Python,我目前正在尝试编写一个名为“乘坐公共汽车”的(饮酒)游戏。我现在的问题不一定在于游戏的编程,而是生成一副没有任何副本的牌。我已经在这个论坛上到处找过了,但是我找到的唯一的东西是如何生成随机卡片,而不是如何排除重复的卡片。这是我现在用来生成卡片的代码: suitnum = ["spade","club","heart","diamond"] cardnum = [2,3,4,5,6,7,8,9,10,"jack","queen","king","ace"] suit1 =

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

    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),因为我需要它们。我现在的问题是这段代码允许重复出现。我想找到一种方法,在程序开始时基本上生成一副“洗牌”牌,并且在每一轮中都能够参考该牌组并获得牌组中的顶牌。我认为这是解决这个问题最简单的方法。有没有人知道如何编写代码,或者有没有更简单的方法来解决我的问题

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

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()

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

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]

谢谢你的帮助,我想出了一个适合我的方法。我创建了一个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))
    card = random.choice(deck)
    deck.remove(card)
    suit1, face1 = card
在我需要抽一张牌的每一张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))
    card = random.choice(deck)
    deck.remove(card)
    suit1, face1 = card

现在,每次我需要使用不同定义的另一张卡时,我都可以将Suite1和face1的变量名更改为Suite2和face2等。

您可以使用class
set
插入您已经获得的卡,因为class
set
是一个独特对象的集合,如果您尝试添加现有卡,您会得到一个例外。谢谢您的回答。selection.split()命令的功能是什么?它在空格上拆分“suit card”字符串,并返回一个带有[suit,card]的数组