Рубин не позволяет мне сравнивать значения - PullRequest
0 голосов
/ 22 февраля 2019

Я сделал код ниже, но когда я запускаю его, в том числе, если я выбираю правильный номер, консоль печатает отладку.Почему это?Что я делаю неправильно?

puts 'Welcome to the number guessing game.  I will pick a number between 1-100.  It will be your job to guess the number.  If you are incorrect, I will tell you if your guess is higher or lower than my number, I will let you know.'
puts "Time to guess!"
mine = (rand(1..100))
puts mine
grabber = gets.chomp! 
if mine == grabber
  puts 'That\'s it!'
else 
  print 'debug'
end

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Как сказал @meagar, вы сравниваете разные типы (строка из gets и число из rand), которые всегда будут возвращать false.

При этом у вас есть несколько разныхспособы приведения / преобразования типов данных в ruby.

Наиболее распространенный, как показал @maeger, использует to_i, однако это может привести к некоторым странным поведениям, так как любая строка не может быть легко проанализирована какinteger вернет 0.

2.5.3 :001 > 'potato'.to_i 
=> 0
2.5.3 :002 > '0xff'.to_i 
=> 0

Если вы хотите избежать этого, вы можете использовать Integer(arg), это на самом деле метод, определенный в Kernel, который приложит все усилия, чтобы проверить, действительно ли строка конвертируема.в целое число, и если это не удастся, он поднимет ArgumentError.

2.5.3 :001 > Integer('potato')
=> ArgumentError (invalid value for Integer(): 'potato')
2.5.3 :002 > Integer('2') 
=> 2
2.5.3 :003 > Integer('0xff') # Hexadecimal
=> 255 
2.5.3 :004 > Integer('0666') # Octal
=> 438
2.5.3 :005 > Integer('0b1110') # Binary
=> 14 
0 голосов
/ 22 февраля 2019

Вы сравниваете значения двух разных типов.gets возвращает строку, rand(1..100) возвращает целое число.Вы не можете сравнить их напрямую.Вам необходимо преобразовать их в один и тот же тип: либо целое число, либо обе строки.

Попробуйте использовать to_i в строке для преобразования ее в целое число:

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