Как сгенерировать случайное число в определенном диапазоне с помощью Ruby? - PullRequest
11 голосов
/ 16 мая 2011

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

Пока у меня есть:

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

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

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

Ответы [ 5 ]

27 голосов
/ 20 июля 2012

Рубин 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 
14 голосов
/ 16 мая 2011

Дайте этому попытку

(1900 + rand(81)).to_s

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

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

"1900" + "1920" = "19001920"

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

4 голосов
/ 16 мая 2011
puts "The year was #{1900 + rand 81}"
2 голосов
/ 16 мая 2011

Рубин 1,8 +

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

Рубин 1,9 +

[*1900..1980].sample
2 голосов
/ 16 мая 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...