Не могу понять, где я делаю ошибку - PullRequest
0 голосов
/ 20 апреля 2019
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 голосов
/ 20 апреля 2019

Этот код должен работать, если вы вызываете этот метод, но метод не нуждается в аргументах. Эти переменные в любом случае объявляются локально.

Прямо сейчас вы бы сделали:

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

Имеется охранное предложение , в котором оно не будет выполнено, если не будет хотя бы одного значения. Затем он вызывает sum, что неудивительно складывает все значения. Разделите на длину, и все готово.

Так что вы бы связали все это с:

values = get_n

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

Примечание. В Ruby, когда вы делите целое число на целое, вы всегда получаете целое число. Это означает, что значения округляются. Если вы предпочитаете получать дробные результаты, вы можете переключить входной преобразователь с .to_i на .to_f. Это изменение приведет к тому, что float будет проходить через остальную часть кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...