Почему мой код Ruby не работает так, как я ожидаю? - PullRequest
1 голос
/ 14 июня 2019

Я изучаю Руби через книгу Криса Пайна «Учись программировать».В книге есть упражнение, которое гласит:

Написать программу «Глухая бабушка».Что бы вы ни сказали бабушке (что бы вы ни печатали), она должна ответить ХАУ ?!ГОВОРИТ, СОННИ !, если только ты не кричишь (набирай все прописные).Если вы кричите, она слышит вас (или, по крайней мере, она так думает) и кричит в ответ, НЕТ, НЕ С 1938 ГОДА!Чтобы ваша программа была правдоподобной, каждый раз, когда бабушка кричит по-разному;может быть, любой случайный год между 1930 и 1950 годами. (Эта часть не обязательна, и будет намного проще, если вы прочитаете раздел о генераторе случайных чисел Руби в конце главы, посвященной методам.) Вы не можете перестать разговаривать с бабушкой, пока некричать до свидания.Подсказка: не забывайте про chomp!«BYE» с «Enter» - это не то же самое, что «BYE» без одного!Подсказка 2: Попробуйте подумать о том, какие части вашей программы должны происходить снова и снова.Все это должно быть в вашем цикле while.

Я написал свой код, и он не работает должным образом.В основном, когда я вводю информацию, она следует порядку, в котором был написан код.Например, если я введу «HELLO», он ответит «HUH ?! ГОВОРИТЬ, СОННИ! Но на самом деле он должен написать« НЕТ, НЕ С 1938 ГОДА! ».появится, если я не буду следовать порядку, в котором был написан код (надеюсь, это имеет смысл).

Я пробовал много вещей, например, не использовал разрыв (для цикла).попытался написать его как один длинный кусок кода без каких-либо ifs или else.

Вот код, который я написал:

puts 'Go speak to Grandma, she\'s in the kitchen!'
speaking = gets.chomp

if speaking == speaking.downcase 
  puts 'HUH?! SPEAK UP, SONNY!'
  gets.chomp

  while speaking == 'BYE'
  puts 'BYE! COME AGAIN SOON!'
  gets.chomp
  break
  end

else speaking == speaking.upcase
  puts 'NO, NOT SINCE 1983!' 
   gets.chomp

end

Я ожидаю, когда я напишу HELLO, чтобы получить соответствующий ответ«НЕТ, НЕ С 1983 ГОДА!». Кроме того, я ожидаю, что разговор будет продолжен, потому что я использовал gets.chomp для всех частей кода. Sp, почему код останавливается?

1 Ответ

1 голос
/ 14 июня 2019

Проблема в коде заключается в том, что условие if ... else не заключено в цикл, поэтому оно не будет выполняться повторно.

Подсказка 2. Попробуйте подумать о том, какие части вашей программы должны происходить послеи снова.Все это должно быть в вашем цикле while

Чтобы цикл работал, вам нужно обернуть все повторяющиеся строки внутри цикла.
В вашем случае цикл должен прерываться только тогда, когда ввод будет BYE

puts 'Go speak to Grandma, she\'s in the kitchen!'
speaking = gets.chomp

until speaking == 'BYE'
  if speaking == speaking.upcase
      puts 'NO, NOT SINCE 1983!'
  else
      puts 'HUH?! SPEAK UP, SONNY!'
  end

  # Get input before next loop
  speaking = gets.chomp
end

puts 'BYE! COME AGAIN SOON!'

Вам не нужно явно проверять нижний регистр, только вы заботитесь о том, «содержит ли ввод только символы верхнего регистра»

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