Проверка, если ответ пуст или нет - PullRequest
0 голосов
/ 03 июня 2018

Я хочу создать цикл для пользователя, пока он не даст мне номер.Но я не знаю правильный метод, чтобы проверить, является ли это число или строка.Ну как-то так.

puts "Enter your age."
age = gets.chomp.to_i
while age.empty?
    age = gets.chomp.to_i
end 

Пустые методы приводят к ошибке.

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Ядро # loop с ключевым словом break обычно используется для таких задач.

r = /
    \A    # match beginning of string
    [1-9] # match a digit greater than zero
    \d*   # match zero or more digits
    $     # match end of line
    /x    # free-spacing regex definition mode

loop do
  print "Enter your age: "
  age = gets[r]
  break age.to_i unless age.nil?
end

Если введено "34\n", строка в терминале будет выглядеть следующим образом:

Enter your age: 34

См. Ядро # print .Если бы использовалось Kernel # put , отобразилось бы следующее:

Enter your age:
34

Обратите внимание, что первый якорь (\A) соответствует началу строки тогда как второй якорь ($) соответствует концу строки .(Смешивание начала и конца якоря строки и строки необычно.) Вместо этого можно написать age = gets.chomp[/\A\d+\z/], где \z соответствует концу строки.

0 голосов
/ 03 июня 2018

Если вам нужно отфильтровать также отрицательные целые числа , вы можете проверить, содержит ли вход только цифры.Например:

age = nil
loop do
  puts "Enter your age: "
  age = gets.chomp
  break if (age.scan(/\D/).empty? & !age.empty?)
end
puts "Your age is #{age}"

age = nil требуется для инициализации переменной и использования вне цикла.Или нужно использовать @age.

.scan(/\D/) генерирует массив, содержащий каждый отдельный символ строки, который не является цифрой \D.Таким образом, если массив пуст, это означает, что строка состоит только из цифр.Например:

p "my age is 30".scan(/\D/) #=> ["m", "y", " ", "a", "g", "e", " ", "i", "s", " "]
p "30".scan(/\D/) #=> []
0 голосов
/ 03 июня 2018

используйте ниже код:

puts "Enter your age."
age = Integer(gets.chomp) rescue nil
while age.nil?
 age = Integer(gets.chomp) rescue nil
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...