puts "Task 6-1: Car Lottery"
cars = ["Toyota", "Lada Sedan", "Mersedes", "Kalina", "Vesta", "Renault", "Honda"]
puts "У нас всего #{cars.size} автомобилей. Вам какой?"
choiseOfPlayer = gets.to_i
if (choiseOfPlayer < 0) or (choiseOfPlayer > cars.size)
puts "такой номер не доспустим"
else
puts "Ваша модель: " + cars[choiseOfPlayer].to_s
end
Если пользователь ведет кусок текста а не цифры, то программа выдаст 1й элемент массива. Как сделать проверку на то, что введенное пользователем является числом?
Кратко есть такой путь
Подробнее Вадик позже ответит.
Всё очень просто: метод to_i
, вызванный у строки, переводит её в целое число, а если ему не удается это сделать (если первый символ строки — не цифра), то он возвращает 0. Смотрите:
> '25'.to_i
=> 25
> '1238'.to_i
=> 1238
> '1,25'.to_i
=> 1
> '1.25'.to_i
=> 1
> 'a1.25'.to_i
=> 0
> 'Я строка'.to_i
=> 0
Так то, есть подозрение, что у переменной можно как то зпросить тип...
Совершенно верно. Действительно, у переменной всегда можно спросить, к какому типу (в Руби — к какому классу) она принадлежит. Почитайте в конспекте 4-го урока.
Однако, с gets
нас ждёт разочарование, т.к. он всегда возвращает строку, поэтому ваш вопрос надо немного изменить: «Как понять, что строка содержит целое число?». А тут уже нужно немного проявить смекалку. Предлагаю вам решить эту мини-задачку самостоятельно.
Если не догадаетесь — пишите, расскажу ;)
p.s. Кстати, для проверки всяких гипотез и решения простых задачек, удобно пользоваться irb. Про эту интерактивную ruby-консоль Миша недавно снял бонусный урок.
puts "Task 6-3: Car Lottery"
cars = ["Toyota", "Lada Sedan", "Mersedes", "Kalina", "Vesta", "Renault", "Honda"]
puts "У нас всего #{cars.size} автомобилей. Вам какой?"
choise_of_player = gets.chomp
string_numbers = ["1","2","3","4","5","6","7","8","9","0"]
if choise_of_player.length > 1
abort "такой номер не доспустим: более двух знаков"
end
if string_numbers.include?(choise_of_player)
if ((choise_of_player.to_i < 0) or (choise_of_player.to_i > cars.size))
abort "такой номер не доспустим: больше количества марок"
else
puts "Ваша модель: " + cars[choise_of_player.to_i].to_s
end
else
abort "такой номер не допустим: введенное не номер"
end
решение не универсальное, конечно, но для этого случая пойдёт.
Описанные тут методы подойдут http://stackoverflow.com/questions/14900490/how-to-cleanly-verify-if-the-user-input-is-an-integer-in-ruby
Integer(gets) rescue nil
или
input_string.to_i.to_s == input_string