1

我是编程新手,我正在尝试回答这个基本问题。

编写一个程序,询问一个人最喜欢的号码。让你的程序在数字上加一,然后将结果建议为更大更好的最喜欢的数字。

这是我必须要做的,但它不会转换为数字。

    puts "What is your favorite number?"
    number = gets.chomp
    number = number.to_i + 1
    puts "I suggest " + number + " as a bigger and better number"
4

3 回答 3

11

更仔细地查看您得到的错误:

What is your favorite number?
42
number.rb:4:in `+': can't convert Fixnum into String (TypeError)
    from number.rb:4:in `<main>'

第 4 行是:

puts "I suggest " + number + " as a bigger and better number"

问题是Ruby 不会隐式转换number为字符串(例如"foo" + 42在Ruby 中无效)。有几个解决方案:

  1. to_s在连接之前调用number将其转换为字符串:

    puts "I suggest " + number.to_s + " as a bigger and better number"
    
  2. 使用Ruby 字符串插值

    puts "I suggest #{number} as a bigger and better number"
    

选项 2 更惯用,我建议使用它。

于 2013-03-02T02:45:52.287 回答
5

与 ruby​​ 中的许多其他问题一样,有很多方法可以做到这一点....如果没有上面写的三个解决方案,还有两个:

puts "What is your favorite number?"
number = gets.chomp.to_i
puts "I suggest %d as a bigger and better number" % [number + 1]

一个几乎相同:

puts "What is your favorite number?"
number = gets.chomp.to_i
num = number + 1
puts "I suggest %d as a bigger and better number" % [num]
于 2013-05-06T03:35:30.980 回答
2

你可以这样做:

print 'What is your favorite number? '
number = gets.chomp
puts "I suggest #{number.to_i + 1} as a bigger and better number"

关于代码的解释不多,但需要考虑的事情很少:

  1. 如果您要呈现纯文本,请使用'text'而不是"text". “在双引号的情况下,Ruby 做了更多的工作。首先,它查找替换(以反斜杠字符开头的序列)并用一些二进制值替换它们” - Programming ruby​​ 1.9.3
  2. 总是尽量减少代码行数。

这些东西在这里真的很微不足道,但是当你编写一个大程序、网页等时,它真的很重要。

于 2013-03-02T03:55:17.160 回答