Я новичок в рубиновом языке, и пытаюсь создать текстовую приключенческую игру, я хочу включить две строки - PullRequest
1 голос
/ 06 апреля 2019

Я хочу, чтобы пользователь что-нибудь набрал, но он должен включать две строки, такие как «look» и «right», если обе включены в предложение, программа перейдет к следующей строке. Я новичок в ruby, просто знакомлюсь с языком.

Я пробовал && и ||, но это не работает

puts " in which direction do you want to look"  
input = gets.chomp.to_s 

if input.include? == "look" && "right"  
    puts " There is a dead end on the right"  
  elsif input.include? "look" && "left"  
     puts "there is a narrow way , going towards the woods"  
  else   

    puts "i dont understand what you are trying to say"  

 end  

Ответы [ 2 ]

2 голосов
/ 06 апреля 2019

Я бы предложил определить метод, который обрабатывает ввод и возвращает direction для использования в if/then/else:

def get_direction(input)
  keywords = ['look', 'left', 'right']
  directions = {101 => :right, 110 => :left}
  directions.default = :none
  input = input.scan(/\w+/).map(&:downcase).uniq
  key = keywords.map { |k| input.include? k }.map{ |e| e ? 1 : 0 }.join().to_i
  directions[key]
end


Вот несколько примеров вызовов методов:
get_direction("Yes. Look at your right now! Right now! Look!") #=> :right
get_direction("Yes. Look at your left now!") #=> :left
get_direction("Look right. Left them there!") #=> :none
get_direction("Stay right here!") #=> :none


Внутри метода вы можете найти String # scan для разделения ввода на слова. Кроме того, существует .map(&:downcase) для обеспечения нечувствительности к регистру с использованием Array # map . Для выбора вывода используется Hash .

Добавьте p, чтобы распечатать эту строку, чтобы понять, как она работает:

p key = keywords.map { |k| input.include? k }.map{ |e| e ? 1 : 0 }.join().to_i


Теперь вы можете использовать метод следующим образом:
direction = get_direction(gets.chomp.to_s)

if  direction == :right
  p 'right'
elsif direction == :left
  p 'left'
else
  p 'none'
end
2 голосов
/ 06 апреля 2019

Вместо input.include? "look" && "right" вам нужно сравнивать утверждения по одному.

if input.include?("look") && input.include?("right")
    puts " There is a dead end on the right"  
  elsif input.include?("look") && input.include?("left")
     puts "there is a narrow way , going towards the woods"  
  else   
    puts "i dont understand what you are trying to say"  
 end  

Логически, input.include? "look" будет либо возвращать true или false, а input.include? "right" также будет возвращать true или false.Оба заявления должны быть верными, чтобы оно работало!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...