2017-11-06 8 views
-1

をシャッフルonitama_deck.deckとtemp_deckリストがありますが、私は1〜10の値を含むデッキを使用してプログラムを実行すると、私は次のような出力を得る:私はあまりにも大きかった理由は、私が思っていた最初は指数は、私がOnitama</em>ボードゲーム<em>のPythonのバージョンを書いている、と私は、現在のカードをシャッフルする関数を記述しようとしているアルゴリズム

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
10 
10 
Traceback (most recent call last): 
    File "onitama.py", line 33, in <module> 
    deck.shuffle() 
    File "onitama.py", line 25, in shuffle 
    onitama_deck.deck[i] = next_card 
IndexError: list assignment index out of range 

を、そう私は両方のリストを印刷しようとしました。何らかの理由で、各反復最小の奇数はtemp_deckから除去した後、onitama_deck.deckはtemp_deckに等しく設定されている、このような:

iteration: 1 
temp_deck: [2, 3, 4, 5, 6, 7, 8, 9, 10] 
deck: [2, 3, 4, 5, 6, 7, 8, 9, 10] 

iteration: 2 
temp_deck: [2, 4, 5, 6, 7, 8, 9, 10] 
deck: [2, 4, 5, 6, 7, 8, 9, 10] 

iteration: 3 
temp_deck: [2, 4, 6, 7, 8, 9, 10] 
deck: [2, 4, 6, 7, 8, 9, 10] 

iteration: 4 
temp_deck: [2, 4, 6, 8, 9, 10] 
deck: [2, 4, 6, 8, 9, 10] 

iteration: 5 
temp_deck: [2, 4, 6, 8, 10] 
deck: [2, 4, 6, 8, 10] 

そして私は、範囲エラー外のインデックスを取得します。とにかく私の論理の欠陥を説明できますか?助けてくれてありがとう。

+1

エラーが発生したコードを表示しないと、どうすれば助けてくれると思いますか? – Julien

+0

random.shuffle()を使用するだけでなく、それが意図したものです。 –

答えて

2

問題はtemp_deckデッキのコピーではなく、同じデッキへの参照であるということである。

temp_deck = onitama_deck.deck 

コピーを作成するには、これを変更することができます

temp_deck = list(onitama_deck.deck) 
関連する問題