如何在 Ruby 的一个参数中乘以 2 个独立的 rand 值?

How can I multiply 2 separate rand values within one argument in Ruby?

我想在一个参数中乘以 2 个独立的随机数,以匹配以下内容(例如):

rand(1..6) + rand(1..6)

=>9 (result could be anything between 2-12)

我处于学习的早期阶段Ruby,所以请原谅我,但是我如何用乘法实现同样的效果呢?例如,下面只会将相同的随机数相乘两次:

2 * rand(1..6)

=>2 (will only produce 2,4,6,etc)

这是您所期望的。但是我如何更改该语句以表示该范围内的 2 个单独的 rand 计算(给我一个 2 到 12 之间的可能值)?谢谢。

编辑:通过使用@var .times rand,然后执行元素.push 解决。这使我还可以单独显示两个结果,以及执行 .sum 来计算总数。

它的工作原理与加法非常相似。

rand(1..6) * rand(1..6)

会先生成这两个随机数,然后再将它们相乘。 此示例的结果最少为 1,最多为 36。

编辑:

如果您想要任何数字 2-12(与掷两个骰子不同的是均匀分布),

rand(2..12)

否则,真的没有理由乘以任何东西。您应该只使用您在问题中添加的内容。

编辑 2:

现在进入你问题的核心,你想掷 d6 n 次。在你的函数中试一试。

total = 0
n.times { total += rand(1..6) }

这将掷骰子 n 次,每次都将其添加到总数中。

你可以做的是构造一个随机数组,然后对其元素求和:

Array.new(2) { rand(1..6) }.reduce(:+)

这将创建一个包含两个元素的数组,并通过 运行 填充块来填充每个元素。由于每个元素的块 运行 是单独的,因此您会得到单独的随机数。

对于只有两个数字,rand(1..6) + rand(1..6) 可能更容易阅读。但是,随着要加在一起的随机数数量的增加,这样的做法可能更合适:

2.times.map { rand(1..6) }.reduce(:+)

2.times 生成一个 2 元素 Enumerator.

.map { rand(1..6) } 将其转换为 2 个从 1 到 6 的随机数的数组。

.reduce(:+) 将该数组的所有元素相加。

请参阅 times, map, and reduce 的文档。

2.times.sum { rand(1..6) }

(1..2).sum { rand(1..6) }