Как передать значения хэш в метод? Ruby

Задание: Напишите код, который адаптирует этот хеш для условий на Луне. Известно, что вес на луне в 6 раз меньше, чем вес на Земле. “лунный магазин”. Используя хеш с новым весом из предыдущего задания напишите программу, которая для каждого типа спрашивает пользователя какое количество мячей пользователь хотел бы купить в магазине (ввод числа из консоли). В конце программа выдает общий вес всех товаров в корзине. Для сравнения программа должна также выдавать общий вес всех товаров, если бы они находились на Земле.

hh = {soccet: 410, tennis: 58, golf: 45}
hlun = hh.each { |k, v| hh[k] = v.div(6) } #первую часть задания сделал, посчитан вес на луне
puts hlun
def total_weight(options={})
a = options[:soccer_ball_count] || 0
b = options[:tennis_ball_count] || 0
c = options[:golf_ball_count] || 0
(a * v) + (b * v) + (c * v)

end

print "skolko soccet? "
a = gets.to_i
print "skolko tennis? "
b = gets.to_i
print "skolko golf? "
c = gets.to_i

Ответы (1 шт):

Автор решения: gil9red

Действия:

  • Завел словарь веса на Земле (как константа)
  • Добавил функцию, что принимает количество товара и возвращает сумму
  • Для получения веса на Луне разделил результат функции на 6

Пример:

# Вес на Земле
PRODUCT_BY_WEIGHT = {soccet: 410, tennis: 58, golf: 45}

def get_total_weight(soccet_count, tennis_count, golf_count)
    return soccet_count * PRODUCT_BY_WEIGHT[:soccet] \
        + tennis_count * PRODUCT_BY_WEIGHT[:tennis] \
        + golf_count * PRODUCT_BY_WEIGHT[:golf]
end

total = get_total_weight(10, 5, 10)
puts total / 6;  # Общий вес на Луне
puts total;      # Общий вес на Земле

Результат:

806
4840

UPD. Если значения запрашивать из консоли:

print "how many soccet_ball?\n"
soccet_count = gets.to_i

print "how many tennis_ball?\n"
tennis_count = gets.to_i

print "how many golf_ball?\n"
golf_count = gets.to_i

total = get_total_weight(soccet_count, tennis_count, golf_count)
puts total / 6;  # Общий вес на Луне
puts total;      # Общий вес на Земле
→ Ссылка