2017-08-02 9 views
2

私はシャッフルされたトランプカードデッキを作ろうとしています。そうするためには、生成されたカードが以前のものと等しいかどうかをチェックする必要があります。これまでのところ、私はこれを試してみました:[:i]が P.S.リストの複数の要素が変数と等しいかどうかを確認するにはどうすればよいですか?

for i in range(51): 
a=card() 
while(deck[:i]==a): 
    a=card() 
deck[i]=a 

カードは、私は、問題がであることを考えるランダムカード を生成する関数でありますあなたがそのデッキを言ったので

あなたは a in deckを使用して、会員のためにテストすることができ
for i in range(51): 
    a = card() 
    while a in deck: 
     a = card() 
    deck[i] = a 

:リストはすでに52個の要素を持っており、彼らはすべてのあなたの質問に答えるために「空」

+4

すべてのカードのリストを作成せずに、デッキを表すリストで 'random.shuffle'を呼び出してみませんか? – ctj232

+0

だから私は2つのwhileループ(数字用とスーツ用)を使ってリストを作成し、次にrandom.shuffleをどのように使うのですか? – user8407045

+0

すべてのリストを取得したら、それを 'deck'と呼んで、' random.shuffle(deck) 'だけを使ってみましょう。こちらのドキュメントもご覧ください:https://docs.python.org/3/library/random.html –

答えて

4

として設定されている、あなたはこのような何かを行うことができます空に初期化されているので、i番目の要素をチェックする必要はありません。

しかし、シャッフルされたカードデッキを作成するには、より良い方法があります。random.shuffleを使用すると、ctj232は言った。

>>> import random 
>>> l = [1, 2, 3, 4, 5] 
>>> random.shuffle(l) 
>>> l 
[3, 5, 4, 2, 1] 

独自のクラスまたはちょうど整数を作り、順番にすべての52枚のカードを表してリストを作成し、それらをシャッフルするrandomライブラリを使用しています。

+0

これは、OPが直面しているのと同じ問題を解決しますが、彼の特定の質問には答えません。少なくとも、質問に答えて、後で代替案を提示してください。 – Don

+1

@Donあなたが正しいです、私もそれを追加します –

0

あなたはまた、のような何かを行うことができます:random.shuffleを使用して

import random 

    cards = [ i for i in range(52)] 
    curentPosition = [ i for i in range(52)] 
    nextPosition = [ i for i in range(52)] 

    print('Positions before shufle:\n',curentPosition) 

    for i in cards: 
     randomPos = random.choice(nextPosition) 
     curentPosition[i] = randomPos 
     nextPosition.remove(randomPos) 


    print('Positions after shufle\n',curentPosition) 
0

は絶対に他の答えは説明したように、あなたの問題を解決するための最良の方法ですが、あなたの元の質問に答えるために:かどうかを確認するには

を既存にこれを適用するには

my_list = [51,47,2,29,6] 
if 51 in my_list: 
    print("51 is already selected") 
else: 
    print("51 isn't in my_list") 

:リストの複数の要素を変数に等しい、あなたはvariable in list構文を使用することができますコード:

for i in range(51): 
    a=card() 
    while(a in deck): 
     a=card() 
    deck[i]=a 
関連する問題