#ruby #integer
#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. num = gets.chomp.to_i или num.to_i * 10 (ниже в вашем коде)
Ответ №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
Комментарии:
1. Я пробовал это, но получаю ту же ошибку: ‘RubyTest.rb: 3: в ` ‘: не удается преобразовать Fixnum в строку (TypeError) из RubyTest.rb: 3
2. @AppSlap: Упс, я думал, Ruby может неявно приводить при объединении строк и целых чисел. Когда вам нужно использовать
со строкой и целым числом, сначала преобразуйте целое число в строку с
to_s
. Например:puts "Your number is " num.to_s "."
.3. @icktoofay спасибо за это, но я все еще получаю ту же ошибку. Мой код теперь выглядит следующим образом: помещает ‘Здравствуйте, не могли бы вы сказать мне свое любимое число?’ num = gets.chomp.to_i помещает ‘Ваше любимое число ‘ num.to_s ‘?’ ‘ Ну, это неплохо, но ‘ num * 10 ‘ буквально в 10 раз лучше!’
4. @AppSlap:
...' (num * 10).to_s '...
5. @AppSlap: Обратите внимание, что вам не нужно использовать,
to_s
если вы используете#{}
вместо, что обычно предпочтительнее в ruby.
Ответ №3:
вы также можете убедиться, что число, которое использует пользователь, является целым числом таким образом:
num = Integer(gets.chomp)
но вы должны создать способ перехватывать ошибку в случае, если пользователь вводит иначе, например, символ или строку so; это должно быть лучше использовать:
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
Это пример взаимодействия с этим скриптом:
give me a number:
sggd
0 es menor a 3 o 3
nil
Я надеюсь, что это лучше прояснит вашу точку зрения.
Комментарии:
1. Это хороший момент в использовании
Integer(gets.chomp)
и на самом деле это отличный способ убедиться, что вы действительно получили целое число.begin; print "enter a number "; num = Integer(gets.chomp); rescue ArgumentError; puts "That's not a number, try again"; retry; end; puts num > 3 ? "#{num} is greater than 3" : "#{num} is less than 3 or 3"
Ответ №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's not bad, but "
new_fav_num " is bigger and better!"
Надеюсь, это поможет.