不能弄清楚我在哪里犯错

时间:2019-04-20 17:00:54

标签: ruby

def average_of_three(num1, num2, num3)​

  puts "Enter first number"
  num1= gets.to_i

  puts "Enter second number"
  num2 = gets.to_i

  puts "Enter third number"
  num3 = gets.to_i

  avg=0

  avg = (num1 +num2 + num3 )/3
  puts "your average is#{avg}"
end

1 个答案:

答案 0 :(得分:0)

如果您调用该方法,则此代码应该可以工作,但是该方法不需要参数。这些变量无论如何都在本地声明。

现在您将要做:

average_of_three(0, 0, 0)

初始值无关紧要,因为无论如何您都忽略它们。它们可以是:zero"Who cares!"一样。

虽然这不是Ruby代码。在编写Ruby时,首先要考虑数据结构。

例如,获取三个值:

def get_n(n = 3)
  n.times.map do |i|
    print "Enter number #{i+1}: "
    gets.to_i
  end
end

这会问一系列问题,并将结果存储在数组中,map就是这样做的。

现在您可以将这些平均:

def average(values)
  return unless (values.any?)

  values.sum / values.length
end

这有一个 guard子句,除非有至少一个值,否则它不会执行。然后调用sum,这毫不奇怪地将所有值相加。用长度除以就可以了。

因此,您可以将所有这些与:

values = get_n

puts "Average is: #{average(values)}"

注意:在Ruby中,当您将整数除以整数时,总会得到一个整数。这意味着值会四舍五入。如果您希望得到分数结果,可以将输入转换器从.to_i切换到.to_f。这种更改将导致浮点数在其余的代码中流动。