Как создать случайное число в определенном диапазоне с помощью Ruby?

Я пытаюсь получить случайный год между 1900 и 1980 годами с Ruby.

До сих пор я:

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

но это просто добавление 1900 и случайное число от 0 до 1979 года, чтобы выглядеть как 19001947.

Я думаю, что мне не хватает чего-то глупого, но может ли кто-нибудь пролить свет?

Ответ 1

Попробуйте

(1900 + rand(81)).to_s

Чтобы быть понятным для прохожих

Во-первых, возникла проблема с конкатенацией строк. Исходный код в вопросе заключался в объединении двух строк (содержащих числа) вместе. Пример:

"1900" + "1920" = "19001920"

Во-вторых, возникла проблема с диапазоном генерируемых случайных чисел. В этом случае, поскольку нам нужен всего 80 лет, мы хотим использовать rand (81) вместо rand (1980). Затем мы берем этот результат и добавляем его к базовому номеру, что даст нам случайное число между 1900 и 1980 годами.

Ответ 2

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 

Ответ 3

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

Ответ 4

Да: вы получаете перегрузку "string catenation" +. Попробуйте (1900+rand(80)).to_s

Ответ 5

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