Python 列出作业问题

Python List Assignment Issues

#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] ] 等等。由于某种原因,分配只是行不通。提前致谢。

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

deck.append(filler[:])

试试这个

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], [1, 0, 0, 0], [2, 0, 0, 0], [3, 0, 0, 0], [0, 0, 0, 0]] ?

首先,您应该使用 filter 的副本,然后您可以获得如下列表:
[[1, 0, 0, 0], [2, 0, 0, 0], [3, 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)

我认为它的问题是 temp=(i+1)%k 因为我们不需要将 1 加到 1。它应该从 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)