如何使用Ruby在特定范围内生成随机数?

时间:2011-05-15 21:36:58

标签: ruby

我试图在1900年到1980年之间随机获得Ruby。

到目前为止,我有:

puts 'the year was: ' +  1900.to_s + rand(1980).to_s

但这只是添加1900和一个从1979年0到1979年的随机数,看起来像19001947。

我认为我错过了一些愚蠢的事情,但任何人都可以放弃任何光明吗?

5 个答案:

答案 0 :(得分:27)

Ruby 1.9.3

1.9.3p0 :001 > rand(1900..1980)
 => 1946 
1.9.3p0 :002 > rand(1900..1980)
 => 1929 
1.9.3p0 :003 > rand(1900..1980)
 => 1934 

答案 1 :(得分:14)

试一试

(1900 + rand(81)).to_s

为路人清楚

首先,有关字符串连接的问题。问题中的原始代码将两个字符串(包含数字)连接在一起。例如:

  

“1900”+“1920”=“19001920”

其次,存在生成随机数范围的问题。在这种情况下,由于我们只想要80年的范围,我们想要使用rand(81)而不是rand(1980)。然后我们将结果添加到基数中,这将在1900年到1980年之间给出一个随机数。

答案 2 :(得分:4)

puts "The year was #{1900 + rand 81}"

答案 3 :(得分:2)

是的:你得到+的“字符串连接”重载。试试(1900+rand(80)).to_s

答案 4 :(得分:2)

Ruby 1.8 +

(1900..1980).to_a[rand(80)]
# or little more Rubyistic
(1900..1980).to_a.shuffle.first

Ruby 1.9 +

[*1900..1980].sample
相关问题