2017-09-26 131 views
1

我目前正在嘗試編程一個名爲「喝酒」的遊戲:乘坐公共汽車。我現在的問題並不一定在編程遊戲,但它會生成一副沒有任何重複的牌。我已經看遍了這個論壇找到它,但我發現的唯一的東西是如何生成隨機卡,而不是如何排除重複。這是我現在所擁有的用於生成卡代碼:生成撲克牌套牌Python 3

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

您可以使用在你插入你已經獲得的卡的類'set'中,類'set'是一個唯一對象的集合,如果你試圖添加一個現有的卡,你會得到一個例外。 – Trimax

回答

0

感謝您的幫助,我想出了一種適用於我的方法。我創建了一個高清,看起來像這樣:

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 

現在,每當我需要另一張卡在不同的高清我可以改變suit1和麪1的變量名時間SUIT2和face2等

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

我會建議使用您的當前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] 
+0

謝謝你的回答。 selection.split()命令的功能是什麼? –

+0

它將空間上的'西裝卡'字符串拆分並返回一個[套裝,卡片] –