Как создать случайное число в определенном диапазоне с помощью 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