2017-09-26 11 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作成:各では

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、私はデッキを参照し、一枚のカードをお願いし、再び合わせと直面する中、それを分割(そのIゲームの必要性)。それは次のようになります。

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

は、今私はデフ私はちょうどsuit1とface1の変数名を変更することができます異なる別のカードを取る必要があるたびにface2などSUIT-2とすることが

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

は、私はあなたの現在のsuitnumを使用することをお勧めします実際のカードデッキを生成するための配列をランダムに選択します。こうすることで、カードをアレイから取り出す際にカードを削除することができます。

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

スペースに「スーツカード」文字列を分割し、[suit、card]で配列を返します。 –

関連する問題