如何在 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(:+)
将该数组的所有元素相加。
2.times.sum { rand(1..6) }
或
(1..2).sum { rand(1..6) }
我想在一个参数中乘以 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(:+)
将该数组的所有元素相加。
2.times.sum { rand(1..6) }
或
(1..2).sum { rand(1..6) }