Python 基于循环中的另一个数组更改数组中的元素?
这是一场掷骰子游戏。每个玩家掷骰子两次(我定义了一个函数来实现这一点),我将掷骰子保存在一个数组中。因此,有三名玩家的回合可能看起来像Python 基于循环中的另一个数组更改数组中的元素?,python,arrays,loops,Python,Arrays,Loops,这是一场掷骰子游戏。每个玩家掷骰子两次(我定义了一个函数来实现这一点),我将掷骰子保存在一个数组中。因此,有三名玩家的回合可能看起来像[[1,6],[3,4],[5,2] 我想创建一个数组来保存每个玩家的分数(两个骰子的总和)。我想要分数[0]==玩家1,分数[1]==玩家2,等等 我尝试创建一个长度等于玩家数量的空数组,然后在循环中更改数组的元素 def dice(players): score = [0]*players rolls = [] for i in r
[[1,6],[3,4],[5,2]
我想创建一个数组来保存每个玩家的分数(两个骰子的总和)。我想要分数[0]==玩家1
,分数[1]==玩家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])
为什么它的分数部分会添加到上一个索引中?有人能解释一下吗?我希望它只添加到得分[I]
,并将玩家分开
编辑:我想能够做多轮骰子,这样分数可以增加。这就是为什么我不想做score[I]=sum(r)
为什么它的分数部分会添加到上一个索引中
该循环表示,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
依此类推,循环是嵌套的,这是您的问题。我会尽力解释的 这是你的密码
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
基本上,您已经要求python运行for循环,这样每个玩家都可以掷一次骰子,然后将该骰子附加到rolls
。
但是每个玩家在掷骰后,你要求python计算当前玩家每次掷骰时发生的所有掷骰。所以玩家1的掷骰会被计算多次
这段代码应该适合你。查看for循环的位置,还请注意我将+=
删除到=
,因为我们不需要添加到分数中,只需要计算分数然后存储它
def dice(players):
score = [0]*players
rolls = []
for i in range(0,players):
rolls.append(diceroll(2))
for i in range(len(rolls)):
score[i] = sum(rolls[i])
return rolls, score
现在我们让每个玩家掷一次骰子,一旦每个人都掷了骰子,我们就有另一个外部for循环来计算分数。试着把你的问题分解成更小的部分 您有一个列表,其中每个对象包含单个玩家掷骰子
for playerRolls in players:
现在,playerRolls
是一个列表,其中包含每个玩家掷骰的数字。这些的总和就是他们的分数。所以
playerScore = 0
for diceRoll in playerRolls:
playerScore += diceRoll
# or a nicer way:
playerScore = sum(playerRolls)
现在将此值附加到分数
score.append(playerScore)
总而言之:
score = []
for playerRolls in players:
playerScore = sum(playerRolls)
score.append(playerScore)
在最后一个循环中,
i
始终等于不应影响代码的players-1
。除非你发布的代码中有我遗漏的东西,否则它仍然有效。哦,我明白你的意思了,那是我的错别字。请看编辑。OP想要“一个保存每个玩家分数的数组”,而最后一个循环只适用于最后一个玩家的得分。我把它从foreach改为for。你做的是累积和,而不是“每一个玩家”的分数。换言之,掷骰记录所有掷骰(同样适用于先前的玩家),当您进行sum(r)
时,它也会将先前的掷骰加在一起。