Как я могу вернуть сообщение об ошибке, когда пользователь вводит неверную информацию? - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть программа, которая отображает нумерованный список и просит пользователя ввести число или имя из списка, и циклически повторяет блок до тех пор, пока пользователь не введет "exit", после чего он заканчивается.

Я хочу добавить одну или две строки, которые помещают сообщение об ошибке, например, "Sorry, I don't seem to understand your request", если пользователь вводит что-то, чего нет в списке (имя / номер) и не является словом "exit".

Я не могу понять это. Любой совет? Мой текущий код ниже.

def start
  display_books
  input = nil
  while input != "exit"
    puts ""
    puts "What book would you more information on, by name or number?"
    puts ""
    puts "Enter list to see the books again."
    puts "Enter exit to end the program."
    puts ""
    input = gets.strip
    if input == "list"
      display_books
    elsif input.to_i == 0
      if book = Book.find_by_name(input)
        book_info(book)
      end
    elsif input.to_i > 0
      if book = Book.find(input.to_i)
        book_info(book)
      end
    end
  end
  puts "Goodbye!!!"
end

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Хороший шаблон для переводчика - это построение вокруг очень способного case заявления Руби:

loop do
  case (gets.chomp.downcase)
  when 'list'
    display_books
  when /\Afind\s+(\d+)/
    if book = Book.find($1.to_i)
      book_info(book)
    end
  when /\Afind\s+(.*)/
    if book = Book.find_by_name($1)
      book_info(book)
    end
  when 'exit'
    break
  else
    puts "Not sure what you're saying."
  end
end

Хотя это включает регулярные выражения, которые могут быть немного пугающими, это дает вам большую гибкость. \A представляет «начало строки» в качестве якоря, а \s+ означает «один или несколько пробелов». Это означает, что вы можете ввести find 99, и он все равно будет работать.

Вы можете создать целый интерфейс командной строки с ним, если вы потратите время на четкое указание команд. Такие вещи, как show book 17 и delete book 17, все возможны с небольшим изменением.

0 голосов
/ 29 апреля 2018

Кажется, что вы должны добавить оператор elsif в этом if:

if book = Book.find_by_name(input)
  book_info(book)
elsif input != 'exit'
  puts "Sorry, I don't seem to understand your request"
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...