生成卡片组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
插入您已经获得的卡,因为classset
是一个独特对象的集合,如果您尝试添加现有卡,您会得到一个例外。谢谢您的回答。selection.split()命令的功能是什么?它在空格上拆分“suit card”字符串,并返回一个带有[suit,card]的数组