如何在0和n之间生成随机数?
0
n
好吧,我想通了。显然有一个名为rand的内置(?)函数:
rand(n + 1)
如果有人给出了更详细的答案,我会将其标记为正确答案。
使用rand(range)
rand(range)
从Ruby随机数:
如果你需要一个随机整数来模拟六面骰子的滚动,你可以使用:1 + rand(6)。掷骰子中的滚动可以用2 + rand(6) + rand(6)来模拟。 最后,如果您只需要一个随机浮点数,只需在没有参数的情况下调用rand。
如果你需要一个随机整数来模拟六面骰子的滚动,你可以使用:1 + rand(6)。掷骰子中的滚动可以用2 + rand(6) + rand(6)来模拟。
1 + rand(6)
2 + rand(6) + rand(6)
最后,如果您只需要一个随机浮点数,只需在没有参数的情况下调用rand。
rand
正如马克-安德烈·拉福在下面是他的答案(投赞成票),Ruby 1.9.2有自己的#0类中提到的(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)(使用Random.new)通常不是一个好主意,如详细解释(再次)由Marc-André拉福,在他的答案(再次)。
Random.new.rand(20..30)
Random.new
但是,如果你不使用Random.new,那么类方法rand只取max值,而不是Range,因为栏杆(积极地)在注释中指出(并且如Random的文档中所述)。只有实例方法可以取Range,如生成一个7位的随机数所示
max
Range
Random
这就是为什么Random.new.rand(20..30)的等价物是20 + Random.rand(11),因为Random.rand(int)返回“大于或等于零和小于论证的随机整数”。20..30包括30,我需要提出一个介于0和11之间的随机数,不包括11。
20 + Random.rand(11)
Random.rand(int)
20..30
不要忘记先在RNG中播种srand()。
虽然您可以使用rand(42-10) + 10来获取10和42之间的随机数(其中10是包含的,42是排他的),但自Ruby 1.9.3以来有一种更好的方法,您可以在其中调用:
rand(42-10) + 10
10
42
rand(10...42) # => 13
适用于所有版本的Ruby,需要我的backports gem。
backports
Ruby 1.9.2还引入了Random类,因此您可以创建自己的随机数生成器对象并具有不错的API:
r = Random.newr.rand(10...42) # => 22r.bytes(3) # => "rnd"
Random类本身充当随机生成器,因此您可以直接调用:
Random.rand(10...42) # => same as rand(10...42)
关于Random.new的注释
在大多数情况下,最简单的是使用rand或Random.rand。每次你想要一个随机数时创建一个新的随机生成器是非常糟糕的主意。如果你这样做,你将得到初始播种算法的随机属性,与随机发生器本身的属性相比,它们是糟糕的。
Random.rand
如果您使用Random.new,则应将其称为尽可能少,例如一次作为MyApp::Random = Random.new并在其他任何地方使用它。
MyApp::Random = Random.new
Random.new有帮助的情况如下:
这个怎么样?
n = 3(0..n).to_a.sample
如果您不仅要查找数字,还要查找hex或uuid,那么值得一提的是SecureRandom模块在1.9.2+中从ActiveSupport找到了ruby核心。所以不需要完整的框架:
SecureRandom
ActiveSupport
require 'securerandom' p SecureRandom.random_number(100) #=> 15p SecureRandom.random_number(100) #=> 88 p SecureRandom.random_number #=> 0.596506046187744p SecureRandom.random_number #=> 0.350621695741409 p SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
记录在这里:Ruby 1.9.3-模块:SecureRandom(lib/securerandom.rb)
rand(6) #=> gives a random number between 0 and 6 inclusivelyrand(1..6) #=> gives a random number between 1 and 6 inclusively
请注意,range选项仅在较新的(我相信是1.9+)版本的ruby中可用。
您可以使用rand方法生成随机数。传递给rand方法的参数应该是integer或range,并返回范围内相应的随机数:
integer
range
rand(9) # this generates a number between 0 to 8rand(0 .. 9) # this generates a number between 0 to 9rand(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
这个链接将对此有所帮助;
下面对ruby中的随机数进行了更清晰的说明;
生成一个0到10的整数
puts (rand() * 10).to_i
生成一个从0到10的数字以更清晰的方式
puts rand(10)
生成一个从10到15的数字15
puts rand(10..15)
非随机随机数
每次生成相同的数字序列程序运行
srand(5)
生成10个随机数
puts (0..10).map{rand(0..10)}
尝试array#shuffle随机化方法
array#shuffle
array = (1..10).to_aarray.shuffle.first
对这个问题最简单的回答:
rand(0..n)
你可以做rand(范围)
x = rand(1..5)
也许对你有帮助我在我的应用里用这个
https://github.com/rubyworks/facetsclass String # Create a random String of given length, using given character set## Character set is an Array which can contain Ranges, Arrays, Characters## Examples## String.random# => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3"## String.random(10)# => "t8BIna341S"## String.random(10, ['a'..'z'])# => "nstpvixfri"## String.random(10, ['0'..'9'] )# => "0982541042"## String.random(10, ['0'..'9','A'..'F'] )# => "3EBF48AD3D"## BASE64_CHAR_SET = ["A".."Z", "a".."z", "0".."9", '_', '-']# String.random(10, BASE64_CHAR_SET)# => "xM_1t3qcNn"## SPECIAL_CHARS = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "|", "/", "?", ".", ",", ";", ":", "~", "`", "[", "]", "{", "}", "<", ">"]# BASE91_CHAR_SET = ["A".."Z", "a".."z", "0".."9", SPECIAL_CHARS]# String.random(10, BASE91_CHAR_SET)# => "S(Z]z,J{v;"## CREDIT: Tilo Sloboda## SEE: https://gist.github.com/tilo/3ee8d94871d30416feba## TODO: Move to random.rb in standard library? def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"])chars = character_set.map{|x| x.is_a?(Range) ? x.to_a : x }.flattenArray.new(len){ chars.sample }.joinend end
对我来说效果很好
num = Random.newnum.rand(1..n)
范围=10…50
兰特(范围)
或
range.to_a.sample
range.to_a.shuffle(这将洗牌整个数组,您可以通过第一个或最后一个或任何从该数组中选择一个随机数来随机选择一个)
您可以简单地使用random_number。
random_number
如果正整数为n,则random_number返回一个整数:0<=random_number 像这样使用它: any_number = SecureRandom.random_number(100) 输出将是0到100之间的任何数字。
像这样使用它:
any_number = SecureRandom.random_number(100)
输出将是0到100之间的任何数字。
在ruby中获取随机数的简单方法是,
def random(1..10).to_a.sample.to_send