我是一个完整的Ruby newb,我正在尝试编写一个简单的程序来将Celsius转换为Fahrenheit,反之亦然。 到目前为止,一切都在我的代码中工作,直到它开始转换计算为止。 当它到达第一行转换(摄氏温度到华氏温度转换)时,我在终端中收到错误
“test.rb:17:in':undefined method` - 'for”45“:String (NoMethodError)“
有人可以请我填写我遗失的内容吗?我试图谷歌这无济于事,这可能只是因为我不确定我在寻找什么。代码如下,提前感谢!
puts "This program will convert temperatures from Celcius to Fahrenheit"
puts "or Fahrenheit to Celcius"
puts "to begin, please select which unit you are converting from"
puts "enter 0 for Fahrenheit or 1 for Celcius"
unit_from=gets.chomp
puts "please input the temperature"
degrees_from=gets.chomp
#this is the formula for celcius to fahrenheit
Celcius=(degrees_from-32)*(5/9)
#this is the formula for fahrenheit to celcius
Fahrenheit=(degrees_from)*(1.8)+32
if unit_from = 0
puts Celcius
elsif unit_from = 1
puts Fahrenheit
else
puts "You have entered and invalid option."
end
答案 0 :(得分:0)
测试相等性需要两个等于,如下所示
if unit_from == 0
puts Celcius
elsif unit_from == 1
puts Fahrenheit
else
puts "You have entered and invalid option."
end
答案 1 :(得分:0)
gets
返回一个字符串:
获取(sep = $ /)→string或nil
获取(限制)→字符串或零
获取(sep,limit)→string或nil
返回(并分配给$_
)ARGV
(或$*
)中文件列表中的下一行,如果命令行中没有文件,则返回标准输入。
然后在该String上调用chomp
并获取另一个字符串:
chomp(separator = $ /)→new_str
返回一个新的String
,其中从 str (如果存在)的末尾删除了给定的记录分隔符。
这意味着您在unit_from
和degrees_from
中有字符串:
unit_from = gets.chomp
#...
degrees_from = gets.chomp
字符串对减法一无所知,因此degrees_from-32
会给您一个错误。如果您想使用整数输入,请输入几个to_i
个调用:
unit_from = gets.chomp.to_i
#...
degrees_from = gets.chomp.to_i
下一个问题是5/9
是整数除法,因此5/9
只是编写0
的一种复杂方式。你想要浮点数,所以你应该使用5.0/9
,5/9.0
,5.to_f/9
,......
之后的下一个问题是你最终if
:
if unit_from = 0
puts Celcius
elsif unit_from = 1
puts Fahrenheit
else
puts "You have entered and invalid option."
end
总是会说puts Celcius
。 unit_from = 0
是一项任务,而非比较; Ruby中的赋值也是一个表达式,因此if unit_from = 0
在语法上有效但在逻辑上无效;赋值的值是它的右边所以unit_from = 0
(作为表达式)只是0
而且由于0
在Ruby中是真的,你总是会在第一个分支中结束。您想使用==
进行比较:
if unit_from == 0
puts Celcius
elsif unit_from == 1
puts Fahrenheit
else
puts "You have entered and invalid option."
end
答案 2 :(得分:0)
unit_from和degrees_from的值都是字符串,并且由于显而易见的原因,您无法对字符串进行乘法运算。所以首先将它们转换为整数。
unit_from=gets.chomp.to_i
puts "please input the temperature"
degrees_from=gets.chomp.to_i
to_i 用于将任何字符串转换为整数。例如: “2”是一个字符串,将其转换为整数
2.0.0-p247 :001 > "2"
=> "2"
2.0.0-p247 :002 > "2".class
=> String
2.0.0-p247 :003 > "2".to_i
=> 2
2.0.0-p247 :004 > "2".to_i.class
=> Fixnum
“=”也是一个赋值运算符,即 a = 2,仅将值2赋给变量a。
检查是否值为2,我们需要使用“==”
2.0.0-p247 :006 > a = 2
=> 2
2.0.0-p247 :007 > puts a
2
=> nil
2.0.0-p247 :008 > a == 2
=> true