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

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

到目前为止我有:

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

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

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

试一试

 (1900 + rand(81)).to_s 

为路人清楚

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

“1900”+“1920”=“19001920”

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

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 
 puts "The year was #{1900 + rand 81}" 

是的:您正在获得+的“字符串连接”重载。 尝试(1900+rand(80)).to_s

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