2017-08-24 69 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

您追加'填充符'52次。 –

回答

1

追加列表的副本而不是列表本身。

deck.append(filler[:]) 
+0

我應該在哪裏插入那行代碼? –

+0

你不插入它,你替換看起來非常非常相似的一行代碼。 –

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,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],...] 您的代碼應該是這樣的:
甲板= []

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

我認爲它的問題是temp =(i + 1)%k,因爲我們不需要將1加1,它應該從0開始。另外,t o這個,你需要正確追加,以便它工作。代碼如下所示:

#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)