2017-08-24 7 views
0
#DeckOfCards 
deck = [] 

filler= [0, 0, 0, 0] 

def deck_generator(): 

    counter = 0 
    for i in range (52): 
     counter += 1 
     deck.append(filler) 
    return deck 

def deck_values(i): 

    k = 4 
    temp = (i + 1) % k 
    return temp 
deck = deck_generator() 

for i in range(52): 

    deck[i][0] = deck_values(i) 

このコードの目的は、内側リストの最初のインデックスに0〜3の値を外側リストのすべての値に割り当てることです。 [[0、0、0、0]、[1,0,0,0]、[2,0,0,0]、[3,0,0,0]、[0,0,0,0 ]] 等々。何らかの理由で割り当てが機能しないだけです。前もって感謝します。Pythonリストの割り当てに関する問題

+1

'filler 'を52回追加します。 –

答えて

1

リスト自体の代わりにリストのコピーを追加します。

deck.append(filler[:]) 
+0

このコード行はどこに挿入すればよいですか? –

+0

これを挿入しないと、非常によく似た1行のコードが置き換えられます。 –

0

(見やすくするために編集)このコードの印刷を実行して、この

deck = [] 
for i in range(52): 
    deck.append([i % 4, 0, 0, 0]) 
print (deck) 

をお試しください:

[[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], 
[0, 0, 0, 0], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0]] 
0

あなたは、あなたが[[0、0、0を取得したい確信しています0]、[1,0,0,0]、[2,0,0,0]、[3,0,0,0]、[0,0,0,0]]は、

まず、フィルタのコピーを使用して、次のようなリストを取得する必要があります。
[[1、0、0、0]、[2、0、0、0]、[3、 0]、[0,0,0]、[0,0,0,0]、...]

しかし、[[0、0、0、0]、[1、0、0 、0]、[2、0、0、0]、[3、0、0、0]、...] あなたのコードは次のようにする必要があります:
デッキ= []

filler= [0, 0, 0, 0] 

def deck_generator(): 

    counter = 0 
    for i in range (52): 
     counter += 1 
     deck.append(filler[:]) 
    return deck 

def deck_values(i): 

    k = 4 
    temp = i % k  #not temp = (i+1) % k 
    return temp 


deck = deck_generator() 

for i in range(52): 

    deck[i][0] = deck_values(i) 

print(deck) 
0

I私たちに1を加える必要はないので、それがtemp =(i + 1)%kであると考えてください。それは0から始めるべきです。これは正しく動作するように正しく追加する必要があります。コードは次のようになります。

#DeckOfCards 
deck = [] 

filler= [0, 0, 0, 0] 

def deck_generator(): 

    counter = 0 
    for i in range (52): 
     counter += 1 
     deck.append(filler[:]) 
    return deck 

def deck_values(i): 

    k = 4 
    temp = (i) % k 
    return temp 

deck = deck_generator() 

for i in range(52): 

    deck[i][0] = deck_values(i) 
関連する問題