简单的Ruby平均程序

时间:2017-01-04 21:02:14

标签: ruby

我计算用户将在Ruby中输入的3个数字的平均值。每次我运行应用程序时,用户输入3个数字,但我收到错误声明:

  

test.rb:7:<main>': undefined method /&#39; for&#34; 23 \ n23 \ n24 \ n&#34;:String(NoMethodError)

我的代码如下:

puts "Enter first"
num1 = gets
puts "Enter second"
num2 = gets
puts "Enter third"
num3 = gets
avg = (num1 + num2 + num3) / 3
puts "Average is  " + avg

3 个答案:

答案 0 :(得分:4)

试试这个:

puts "Enter first"
num1 = gets.to_i
puts "Enter second"
num2 = gets.to_i
puts "Enter third"
num3 = gets.to_i
avg = (num1 + num2 + num3) / 3.0
puts "Average is #{avg}"

首先,您需要从gets方法中删除换行符,并通过调用.to_i将字符串转换为整数。然后,要正确输出平均值,只需使用字符串插值。

答案 1 :(得分:0)

我对Ruby一无所知,但如果它与Python类似,则必须将从字符串中获得的输入转换为整数。现在你的程序只是连接你输入的字符串,并且因为你不能在字符串上使用/而感到困惑。

编辑:您必须在输入上使用方法.to_i将其转换为整数。

答案 2 :(得分:0)

gets会返回String,而非数字。因此,您需要先调用to_i

此外:要返回Float您的计算需要在/的左侧或右侧有浮点值,否则它将返回Integer(可能是意外的) ):

(1 + 1 + 2) / 3
#=> 1
(1 + 1 + 2) / 3.0
#=> 1.3333333333333333

将您的代码更改为:

puts "Enter first"
num1 = gets.to_i
puts "Enter second"
num2 = gets.to_i
puts "Enter third"
num3 = gets.to_i
avg = (num1 + num2 + num3) / 3.0
puts "Average is #{avg}"