python - 根据循环中的另一个数组更改数组中的元素?
问题描述
这是一个骰子游戏。每个玩家掷骰子两次(我定义了一个函数来执行此操作)并将掷骰子保存在一个数组中。所以三名玩家的转牌可能看起来像[[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)
解决方案
为什么它的分数部分会添加到之前的索引中?
这个循环说这是迄今为止生成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
等等
推荐阅读
- linux - Jenkinsfile 在环境变量值的末尾添加换行符
- git - 我在 macOS 我尝试在线和本地清除我的旧 gitHub 名称,但它不会在本地使用,我仍然在提交时获得旧用户名
- c++ - C ++在构造函数中使用数组初始化对象
- php - 未使用 isset() 函数调用按钮
- nginx - 设置 Access-Control-Allow-Origin 时,来自 Origin 的 URL 已被 CORS 策略阻止
- android - 当应用程序被杀死或关闭时,我如何保持后台 android 服务运行
- javascript - 为什么 el-input 无法在 google chrome 扩展中输入任何内容
- python - AWS_CDK.AWS_ECS:EC2 启动类型配置错误的集群容器实例
- php - 是否可以将字符串用作多维数组的变量键?
- italic - 这 4 个 html 元素之间有什么区别吗?