Ruby получает/ставит только для строк?

Я новичок в Ruby и в настоящее время работаю над некоторым кодом практики, который выглядит следующим образом:

puts 'Hello there, Can you tell me your favourite number?'
num = gets.chomp
puts 'Your favourite number is ' + num + '?'
puts 'Well its not bad but  ' + num * 10 + ' is literally 10 times better!'

Этот код, однако, просто помещает десять копий переменной num и фактически не умножает число, поэтому я предполагаю, что мне нужно сделать переменную 'num' целым числом? У меня не было успеха в этом, так может кто-нибудь показать мне, где я ошибаюсь?

Ответы

Ответ 1

Если вы используете to_i, тогда chomp до того, как это будет лишним. Итак, вы можете сделать:

puts 'Hello there, Can you tell me your favourite number?'
num = gets.to_i
puts 'Your favourite number is ' + num.to_s + '?'
puts 'Well its not bad but  ' + (num * 10).to_s + ' is literally 10 times better!'

Но в целом использование "#{}" лучше, так как вам не нужно заботиться о to_s, и он работает быстрее, и его легче увидеть. Метод String#+ особенно очень медленный.

puts 'Hello there, Can you tell me your favourite number?'
num = gets.to_i
puts "Your favourite number is #{num}?"
puts "Well its not bad but  #{num * 10} is literally 10 times better!"

Ответ 2

Используйте метод to_i, чтобы преобразовать его в целое. Другими словами, измените это:

num = gets.chomp

Для этого:

num = gets.chomp.to_i

Ответ 3

вы также можете убедиться, что число, которое пользователь использует, является целым числом следующим образом:

num = Integer(gets.chomp)

но вы должны создать способ поймать ошибку в случае, если пользователь вводит иначе, как char, или строку так; лучше использовать:

num = gets.chomp.to_i

Если пользователь вводит другой тип данных, num будет равен 0, как вы можете видеть в этом тестовом примере:

puts "give me a number:"
num = gets.chomp.to_i
if num >3
 puts "#{num} es mayor a 3 "
else 
 puts "#{num} es menor a 3 o 3"
end

Это пример взаимодействия с этим script:

give me a number:
 sggd
0 es menor a 3 o 3
nil

Надеюсь, это лучше пояснит вашу мысль.

Ответ 4

Я написал аналогичную программу, как ваша. Вот как я, наконец, получил его, чтобы он работал правильно! Мне нужно было назначить любимый номер целым числом. Затем в следующей строке я устанавливаю new_fav_num со значением fav_num +1 и затем преобразую его в строку. После этого вы можете просто подключить свой код к оператору return, который вы хотите сказать пользователю, только вы должны преобразовать первый fav_num в строку.

puts "What is your favorite number?"

fav_num = gets.chomp.to_i

new_fav_num = (fav_num + 1).to_s

puts "Your favorite number is " + fav_num.to_s + ". That not bad, but " +
new_fav_num + " is bigger and better!"