Ситуация не работает - PullRequest
0 голосов
/ 11 июня 2018

Я изучаю Ruby из раздела «Программирование на Ruby, Прагматичные программисты (2-й, 2005)» и застрял в главе «Заявление о ситуации».Поэтому я скопировал и вставил код из моей версии из книги:

def kind
  puts "Type year and I'll tell you genre: "
  ask = gets.chomp

  kind = case ask
  when 1850..1889 then "Blues"
  when 1890..1909 then "Ragtime"
  when 1910..1929 then "New Orleans Jazz"
  when 1930..1939 then "Swing"
  when 1940..1950 then "Bebop"
  else "Jazz"
end


puts "You typed year #{ask}. Genre of music in that period is 
       #{kind}."
end

kind

Следовательно, в каком бы году я ни ставил, вывод - "Джаз" ... Что я работаю неправильно?

1 Ответ

0 голосов
/ 11 июня 2018

gets.chomp возвращает строку, и вы сравниваете ее с целыми числами.

Вы можете проверить ask после того, как назначите ее:

ask = gets.chomp
p ask

Когда вы запустите скрипт ивведите номер (например, 1940), вы должны увидеть "1940" напечатанный в терминале.Кавычки вокруг числа показывают, что переменная содержит строку, а не число.(К вашему сведению, здесь не используется puts, поскольку он не показывает кавычки.)

Как писал мудасобва в своем комментарии, способ исправить это - привести данные к числу перед сравнением.it:

ask = gets.chomp.to_i

Если вы добавите p ask снова, вы должны увидеть, что на терминал выводится только номер без каких-либо символов ".Это показывает, что переменная содержит целое число.

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