Как использовать .include? захватить несколько вариантов, в результате одной операции - PullRequest
0 голосов
/ 18 мая 2019

Я пишу простой калькулятор, который спрашивает пользователя, какое вычисление он хочет выполнить с выбором между «+», «-», «*» и «/».

Код работает, когда я разделяю каждый параметр с помощью ||. Тем не менее, я бы предпочел использовать .include? чтобы избежать повторения.

while play_again != "N"
  puts "Enter a first number:"
  first_num = gets.chomp.to_i
  puts "Enter a second number:"
  second_num = gets.chomp.to_i
  puts "Which operation would you like to perform? '+', '-', 'x', '/'"
  operator = gets.chomp
  if operator == "+" || operator == "-" || operator == "x" || operator   
  == "/"
    puts calculator(first_num, second_num, operator)
  else
    puts "That wasn't a valid selection."
  end
  puts "Do you want to calculate something else? (Y/N)"
  play_again = gets.chomp
end

Я пытался переписать строку, начинающуюся с if operator, с if operator.include?(%w[+ - X /].to_s), но это неправильно фиксирует вводимые пользователем данные и всегда выдает «Это неверный выбор».

Ответы [ 2 ]

3 голосов
/ 18 мая 2019

Таким образом

if %w(+ - * /).include?(operator)

более короткий путь для этого

if ["+", "-", "*", "/"].include?(operator)

Это имеет смысл, не правда ли?Вы проверяете, что оператор включен в некоторые опции.В этом случае опциями являются четыре строки, символы для четырех основных математических операций.

1 голос
/ 19 мая 2019

A case when структура управления позволяет указать несколько условий.Звучит тяжело, на самом деле легко:

puts case operator
  when  '+', '-', 'x', '/' then calculator(first_num, second_num, operator)
  else "That wasn't a valid selection."
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...