Тест на повторяющийся ввод gets.chomp в Ruby

Я работаю в Ruby и пытаюсь проверить, что ввод пользователя (переменная kid) трижды одинаков.

Я хочу, чтобы мой метод speak вызывался бесконечно, пока пользователь не введет «BYE» три раза, когда ему будут заданы три отдельных вопроса.

Прямо сейчас, если пользователь вводит «ПОКА» хотя бы для одного вопроса, весь диалог между терминалом и пользователем завершается.

Есть ли способ, чтобы программа проверила, что «ПОКА» произносится три раза, и только один раз, произнесенный три раза, закончил разговор?

kid = gets.chomp    
unless kid == "BYE"  
    speak  
end

Я не знаю, есть ли действительно простое решение или только сложное, но любые ответы помогают.


person Tommy Bruzzese    schedule 08.07.2015    source источник


Ответы (2)


Вам нужно отслеживать, сколько раз пользователь вводил «BYE». Когда это число достигает 3, вы выходите:

 byecount = 0
 while kid = gets.chomp
 case kid     
  when "BYE"
    #increase the count of bye  
    byecount +=1
    puts byecount
    break if byecount == 3
  else
    #reset our count
    byecount = 0
    speak
  end
end

Код сбрасывается на 0 при ответе, отличном от «ПОКА».

Я считаю, что оператор case очень удобен в подобных ситуациях при работе с различными пользовательскими данными, особенно в сочетании с регулярными выражениями.

person Doon    schedule 08.07.2015
comment
Ну, OP сказал, что разговор завершен, выход делает это :) Но это было предназначено для демонстрации того, как проверить состояние ввода/сохранения. Вы можете заменить exit на break, и он выйдет из цикла while и, таким образом, также завершит разговор. - person Doon; 08.07.2015
comment
Достаточно справедливый, обновленный ответ, чтобы использовать перерыв для выхода из режима while, а не остановку выхода/мира. - person Doon; 08.07.2015

Я предлагаю найти рубиновый учебник о «циклах» и «потоке управления».

Я думаю, что в уроке Ruby Primer на rubymonk.com может быть то, что вам нужно.

Этот пример также может быть полезен:

times = 0          # keep track of iterations
while times < 10   # repeatedly, while this condition is true
  puts "hello!"    # output "hello!"
  times += 1       # increase count of iterations
end
person Kache    schedule 08.07.2015
comment
Хотя важно знать о циклах и управлении потоком, на самом деле это не дает ответа на вопрос. Как бы вы применили это к вопросу? - person the Tin Man; 08.07.2015
comment
Назовите это попыткой привести его к ответу, а не просто закодировать его для него. Понятия, к которым обращается эта проблема, представлены в начале всех основных руководств по программированию, и я чувствовал, что для него важно иметь возможность найти одно и извлечь из него уроки, а не просто дать ему ответ прямо. - person Kache; 08.07.2015
comment
Но это сайт ответов... И они сами могут определить, что для них важно. - person vgoff; 11.07.2015
comment
см. метаданные .stackoverflow.com/questions/334822/, где объясняется, что иногда лучше не предоставлять полный пример кода - person Kache; 18.04.2019