Решение на Първа задача - температура и химични елементи от Милена Монова

Обратно към всички решения

Към профила на Милена Монова

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 17 успешни тест(а)
  • 0 неуспешни тест(а)

Код

def convert_between_temperature_units(degrees, from_unit, to_unit)
celsius_degrees = convert_to_celsius degrees, from_unit
convert_from_celsius celsius_degrees, to_unit
end
def convert_to_celsius(degrees, from_unit)
if from_unit == 'F'
(degrees - 32) / 1.8
elsif from_unit == 'K'
degrees - 273.15
else
degrees
end
end
def convert_from_celsius(degrees, to_unit)
if to_unit == 'K'
degrees + 273.15
elsif to_unit == 'F'
degrees * 1.8 + 32
else
degrees
end
end
MELTIING_POINTS =
{
'water' => 0,
'ethanol' => -114,
'gold' => 1064,
'silver' => 961.8,
'copper' => 1085
}
def melting_point_of_substance(substance, unit)
convert_from_celsius MELTIING_POINTS[substance], unit
end
BOILING_POINTS =
{
'water' => 100,
'ethanol' => 78.37,
'gold' => 2700,
'silver' => 2162,
'copper' => 2567
}
def boiling_point_of_substance(substance, unit)
convert_from_celsius BOILING_POINTS[substance], unit
end

Лог от изпълнението

.................

Finished in 0.00773 seconds
17 examples, 0 failures

История (2 версии и 4 коментара)

Милена обнови решението на 12.10.2016 09:01 (преди над 7 години)

+def convert_between_temperature_units(graduses, unit1, unit2)
+ celsius_graduses = convert_to_celsius graduses, unit1

graduses :/ Използвай английски думи - не пиши на шльокавица в кода :)

Също, unit1 и unit2 не са особено описателни. Две мерни единици, обаче по какво се различават? Може би нещо като from_units и to_units? Така вече става ясно тези две единици какво означават.

+ convert_from_celsius celsius_graduses, unit2
+end
+
+def convert_to_celsius(graduses, unit)
+ return (graduses - 32) / 1.8 if unit == 'F'
+ return graduses - 273.15 if unit == 'K'
+ return graduses if unit == 'C'

Не е добра идея да имаш няколко подобни конструкции една след друга, особено когато те са единственото в метода. Използвай един if с elsif-ове и разчитай на това, че всичко в Ruby е израз. Така няма да ти се наложи да пишеш и return :)

+end
+
+def convert_from_celsius(graduses, unit)
+ return graduses + 273.15 if unit == 'K'
+ return graduses * 1.8 + 32 if unit == 'F'
+ return graduses if unit == 'C'
+end
+
+def melting_point_of_substance(substance, unit)
+ melting_points = { 'water' => 0, 'ethanol' => -114, 'gold' => 1064, 'silver' => 961.8, 'copper' => 1085 }

Табличка - супер! Може да изкараш този хеш като константа (MELTING_POINTS) извън функцията. Така ще се създаде само веднъж и ще можеш да ги подредиш по едно вещество на ред, вместо да са всички на един ред.

+ convert_from_celsius melting_points[substance], unit
+end
+
+def boiling_point_of_substance(substance, unit)
+ boiling_points = { 'water' => 100, 'ethanol' => 78.37, 'gold' => 2700, 'silver' => 2162, 'copper' => 2567 }
+ convert_from_celsius boiling_points[substance], unit
+end

Милена обнови решението на 14.10.2016 20:14 (преди над 7 години)

-def convert_between_temperature_units(graduses, unit1, unit2)
- celsius_graduses = convert_to_celsius graduses, unit1
- convert_from_celsius celsius_graduses, unit2
+def convert_between_temperature_units(degrees, from_unit, to_unit)
+ celsius_degrees = convert_to_celsius degrees, from_unit
+ convert_from_celsius celsius_degrees, to_unit
end
-def convert_to_celsius(graduses, unit)
- return (graduses - 32) / 1.8 if unit == 'F'
- return graduses - 273.15 if unit == 'K'
- return graduses if unit == 'C'
+def convert_to_celsius(degrees, from_unit)
+ if from_unit == 'F'
+ (degrees - 32) / 1.8
+ elsif from_unit == 'K'
+ degrees - 273.15
+ else
+ degrees
+ end
end
-def convert_from_celsius(graduses, unit)
- return graduses + 273.15 if unit == 'K'
- return graduses * 1.8 + 32 if unit == 'F'
- return graduses if unit == 'C'
+def convert_from_celsius(degrees, to_unit)
+ if to_unit == 'K'
+ degrees + 273.15
+ elsif to_unit == 'F'
+ degrees * 1.8 + 32
+ else
+ degrees
+ end
end
+MELTIING_POINTS =
+ {
+ 'water' => 0,
+ 'ethanol' => -114,
+ 'gold' => 1064,
+ 'silver' => 961.8,
+ 'copper' => 1085
+ }
+
def melting_point_of_substance(substance, unit)
- melting_points = { 'water' => 0, 'ethanol' => -114, 'gold' => 1064, 'silver' => 961.8, 'copper' => 1085 }
- convert_from_celsius melting_points[substance], unit
+ convert_from_celsius MELTIING_POINTS[substance], unit
end
+BOILING_POINTS =
+ {
+ 'water' => 100,
+ 'ethanol' => 78.37,
+ 'gold' => 2700,
+ 'silver' => 2162,
+ 'copper' => 2567
+ }
+
def boiling_point_of_substance(substance, unit)
- boiling_points = { 'water' => 100, 'ethanol' => 78.37, 'gold' => 2700, 'silver' => 2162, 'copper' => 2567 }
- convert_from_celsius boiling_points[substance], unit
+ convert_from_celsius BOILING_POINTS[substance], unit
-end
+end