Ruby只为字符串获取/放置?

时间:2011-05-15 00:30:31

标签: ruby integer

我是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'变量设为整数?我没有成功,所以有人能告诉我哪里出错了吗?

4 个答案:

答案 0 :(得分:25)

如果您使用的是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!"

答案 1 :(得分:6)

使用to_i方法将其转换为整数。换句话说,改变这个:

num = gets.chomp

对此:

num = gets.chomp.to_i

答案 2 :(得分:0)

您还可以确保用户使用的数字是这样的整数:

num = Integer(gets.chomp)

但是你必须创建一种方法来捕获错误,以防用户输入,否则像char或string这样;最好使用:

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

我希望这能更好地澄清你的观点。

答案 3 :(得分:0)

我写了一个与你类似的程序。这是我最终如何正常工作!我不得不将最喜欢的数字指定为整数。然后,在下一行中,我将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!"

希望这有帮助。