我目前正在尝试编写一个名为的(饮用)游戏:乘坐公共汽车。我现在的问题并不一定在编程游戏中,但它产生的是一副卡片,没有任何重复。我已经遍布这个论坛找到它,但我发现的唯一的事情是如何生成随机卡而不是如何排除重复。这是我现在生成卡片的代码:
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),因为我需要它们。我现在的问题是这个代码允许重复发生。我想找到一种方法来基本上生成一个混乱的'在计划的开始和每一轮中的牌组都可以参考该牌组并获得牌组的顶牌。我认为这是处理问题的最简单方法。有没有人有任何想法如何编码,或者可能有任何更简单的方法来解决我的问题?
答案 0 :(得分:2)
生成卡片列表,然后每次取出一个随机元素:
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()
答案 1 :(得分:0)
我建议您使用当前的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]
答案 2 :(得分:0)
感谢您的帮助,我想出了一条对我有用的方法。我创建了一个看起来像这样的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等。