Как передать значения хэш в метод? 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; # Общий вес на Земле