在 Ruby 中,如何您生成随机数字0n之间?

2008-10-13 18:07:24
问题评论:

回答:

rand(range)有什么?

Ruby 的随机编号:

如果您需要模拟六面骰子一卷的随机整数,可使用︰ 1 + rand(6)在 craps 辊无法模拟与2 + rand(6) + rand(6).

最后,如果您仅需要随机浮点数,只需调用rand不带任何参数。


因为Marc André Lafortune提到在下他答案 (转 upvote 它)Ruby 1.9.2 有其自己的Random(自己帮助进行调试,因此,Marc André 1.9.2 目标该功能)。

例如,在此游戏需要猜测 10 个号码中,您可以初始化它们与︰

10.times.map{ 20 + Random.rand(11) } 
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]

注意︰

这就是为什么相当于Random.new.rand(20..30)将是20 + Random.rand(11),因为Random.rand(int)返回"随机整数大于或等于零且小于参数。"20..30包括 30,我需要提出一个随机数字介于 0 和 11,排除 11。

难道这不是特别非拼音的状?我认为一切都是对象、 最奇怪和联系人...

@yar︰ 这是位"perlish"。现在,Ruby 具有随机类 (请参阅我的答案)

@VonC︰ 这是很好,编辑您的答案,说新的Random类,但它是一个可怕的主意,要在您的示例类似的多次调用Random.new我已编辑的说明,我的回答。

@Marc-André︰ 为 true,我具有编辑此答案并再次;) 引用到您

@VonC ah:) 很抱歉如果我是有点残酷,它只是对感到惊讶我

尽管您可以使用rand(42-10) + 10获得1042 (其中 10 是独占的非独占和 42) 之间的随机数字,还有更好的方式因为 Ruby 1.9.3,您就可以调用︰

rand(10...42) # => 13

可用于通过要求我backports gem 的 Ruby 的所有版本。

Ruby 1.9.2 还引入Random类,因此您可以创建您自己的随机数字生成器对象,并有很好的 API:

r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"

Random类本身用作随机生成器,因此直接调用︰

Random.rand(10...42) # => same as rand(10...42)

Random.new上的注释

在大多数情况下,最简单的形式是使用randRandom.rand每次创建一个新的随机生成器要一个随机数是一个糟糕的主意如果这样做,您将获得初始种子设定算法的随机属性,它们是 atrocious 与随机生成器本身的属性.

如果您使用Random.new,您应该因此调用它作为尽可能少,例如一次为MyApp::Random = Random.new ,并使用它在其他地方。

其中Random.new是有帮助的情况如下所示︰

  • 要编写 gem,而且不想干扰rand的序列 /Random.rand ,可能依赖于主要程序
  • 要单独重现 (说一个每个线程) 的随机数序列
  • 您希望能够保存并恢复重现数字序列的随机 (那么容易Random对象可以整理)

非常好!+ 1。我已完成我自己的答案,以反映该新功能 (和;) 提及您的发布内容与 Bug #3104)。

backports gem 的工作方式,在广泛的描边

@yar︰ 我backports gem 时,系统就是一个不熟悉 RUby 1.8.7,1.9.1、 1.9.2,但在 Ruby 中实现的方法的集合。我使用 RubySpec 来确保结果是 Ruby 与兼容。

Random.rand(10..42)不起作用。Random.rand类方法不接受范围。(Ruby) 1.9.2p180

@banister︰ 哇,我相信新的 api (rand 与范围、 字节、 等),就可直接通过 Random 对象。rand 的范围将是 1.9.3,并且会使功能请求的字节数。我已编辑我的答案

如果你查找号码不仅还十六进制或 uuid 值得一提的SecureRandom模块 1.9.2+ 中找到其偏离ActiveSupport的 ruby 核心。因此无需完全吹制框架︰

require 'securerandom'

p SecureRandom.random_number(100) #=> 15
p SecureRandom.random_number(100) #=> 88

p SecureRandom.random_number #=> 0.596506046187744
p SecureRandom.random_number #=> 0.350621695741409

p SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"

此处说明的原因︰ Ruby 1.9.3-模块︰ SecureRandom (lib/securerandom.rb)

怎么样如果需要 4 位随机数字?

我以为SecureRandom.random_number(1000..9999) onurozgurozkan

SecureRandom.random_number()并不需要一个范围,因此没有。您很可能想东西SecureRandom.random_number(10_000) (适用于 0-9999) 或SecureRandom.random_number(9_000)+1_000 (为 1000年-9999) 等。

Random.rand(1000..9999)

您可以使用rand方法生成的随机数。rand方法传递的参数应该是一个integer或一个range,并返回相应的随机大小的范围内︰

rand(9)       # this generates a number between 0 to 8
rand(0 .. 9)  # this generates a number between 0 to 9
rand(1 .. 50) # this generates a number between 1 to 50
#rand(m .. n) # m is the start of the number range, n is the end of number range

它可以是Float也。rand(1.1..2.7)的工作原理。

我认为比顶部的答案更清楚使用rand(1..6)您读取rand(6)+1.

怎么样呢?

n = 3
(0..n).to_a.sample
内容来源于Stack Overflow How to get a random number in Ruby?
请输入您的翻译

How to get a random number in Ruby?

确认取消