web-dev-qa-db-fra.com

Ruby obtient/met seulement pour les ficelles?

Je suis nouveau sur Ruby et je travaille actuellement sur un code de pratique qui ressemble à ce qui suit:

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!'

Ce code ne met toutefois que dix copies de la variable num et ne multiplie pas le nombre. Je suppose donc que je dois transformer la variable 'num' en entier? Je n'ai pas eu de succès avec ça alors quelqu'un peut-il me montrer où je me trompe, s'il vous plaît?

16
AndyNico

Si vous utilisez to_i, alors chomp avant est redondant. Alors tu peux faire:

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!'

Mais en règle générale, utiliser "#{}" est préférable, car vous n'avez pas à vous soucier de to_s; La méthode String#+ est particulièrement lente.

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!"
24
sawa

Utilisez la méthode to_i pour le convertir en entier. En d'autres termes, changez ceci:

num = gets.chomp

Pour ça:

num = gets.chomp.to_i
6
icktoofay

vous pouvez également vous assurer que le nombre que l'utilisateur utilise est un entier de cette façon:

num = Integer(gets.chomp)

mais vous devez créer un moyen d'attraper l'erreur au cas où l'utilisateur entrerait autrement comme un caractère, ou une chaîne, donc; il faut mieux utiliser: 

num = gets.chomp.to_i

Si l’utilisateur met un autre type de données, num sera égal à 0, comme vous pouvez le voir dans cet exemple de test:

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

Voici un exemple d'interaction avec ce script:

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

J'espère que cela clarifie mieux votre point.

0
Jesus Gonzalez

J'ai écrit un programme similaire au vôtre. Voici comment j'ai finalement réussi à le faire fonctionner! Je devais assigner le nombre favori à un entier. Ensuite, à la ligne suivante, je mets le new_fav_num avec la valeur de fav_num +1, puis je le convertis en chaîne. Après cela, vous pouvez simplement brancher votre code dans l'instruction de retour que vous souhaitez dire à l'utilisateur. Il vous suffit de convertir le premier fav_num en chaîne.

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!"

J'espère que cela t'aides.

0
Brian Ruff