首页 > 解决方案 > 根据循环中的另一个数组更改数组中的元素?

问题描述

这是一个骰子游戏。每个玩家掷骰子两次(我定义了一个函数来执行此操作)并将掷骰子保存在一个数组中。所以三名玩家的转牌可能看起来像[[1,6], [3,4], [5,2]]

我想创建一个数组来保存每个玩家的分数(两个骰子的总和)。我想要score[0] == Player 1,score[1] == Player 2

我尝试创建一个长度等于玩家数量的空数组,然后在循环中更改数组的元素。

def dice(players):
    score = [0]*players 
    rolls = [] 
    for i in range(0,players):
        rolls.append(diceroll(2))
        for r in rolls:
            score[i] += sum(r)
    return rolls, score

对于骰子(6),我得到了这个:

([[1, 2], [2, 2], [4, 2], [6, 2], [6, 4], [1, 1]], [3, 7, 13, 21, 31, 33])

而不是我想要的这个:

([[1, 2], [2, 2], [4, 2], [6, 2], [6, 4], [1, 1]], [3, 4, 6, 8, 10, 2])

为什么它的分数部分会添加到之前的索引中?有人可以解释吗?我希望它只是添加到score[i],并保持玩家分开。

编辑:我希望能够做多轮骰子,这样分数就可以增加。这就是为什么我不想做score[i] = sum(r)

标签: pythonarraysloops

解决方案


为什么它的分数部分会添加到之前的索引中?

这个循环说这是迄今为止生成score[i]的所有值的总和:rolls

for r in rolls:
    score[i] += sum(r)

所以它是这样计算的:

score[0] = rolls[0][0] + rolls[0][1]
score[1] = (rolls[0][0] + rolls[0][1]) + (rolls[1][0] + rolls[1][1])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the previous roll
score[2] = (rolls[0][0] + rolls[0][1]) + (rolls[1][0] + rolls[1][1]) + (rolls[2][0] + rolls[2][1])
           ^^^roll prior to the previous ^^^^^^^^^ the previous roll

等等


推荐阅读