Решение на Първа задача от Михаела Чуренска

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

Към профила на Михаела Чуренска

Резултати

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

Код

def convert_to_bgn(price, currency)
price_in_bgn = price
case currency
when :usd
price_in_bgn = price * 1.7408
when :eur
price_in_bgn = price * 1.9557
when :gbp
price_in_bgn = price * 2.6415
end
price_in_bgn.round(2)
end
def compare_prices(first_price, first_currency, second_price, second_currency)
first_price_in_bgn = convert_to_bgn(first_price, first_currency)
second_price_in_bgn = convert_to_bgn(second_price, second_currency)
first_price_in_bgn <=> second_price_in_bgn
end

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

........

Finished in 0.00636 seconds
8 examples, 0 failures

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

Михаела обнови решението на 10.10.2015 23:06 (преди над 8 години)

+def convert_to_bgn(price, currency)
+new_price = price
+ case currency
+ when :usd
+ new_price = price * 1.7408
+ when :eur
+ new_price = price * 1.9557
+ when :gbp
+ new_price = price * 2.6415
+ end
+ new_price.round(2)
+end
+
+def compare_prices(price, currency, s_price, s_currency)
+ if convert_to_bgn(price, currency) > convert_to_bgn(s_price, s_currency)
+ 1
+ elsif convert_to_bgn(price, currency) == convert_to_bgn(s_price, s_currency)
+ 0
+ else
+ -1
+ end
+end

Здравей :)

Имам някои коментари:

  • Имаш доста проблеми с индентацията на кода. Прочети отново ръководството ни по стил. Използваме по две празни места за отместване - не 1 спейс и не табове.
  • Помисли дали има по-добро име за цената в левове от new_price. new_price означава нова цена, но всъщност цената не е нова - старата си е, просто е преобразувана в български левове.
  • Нямаш нужда от проверката в compare_prices. Прочети за оператора <=>. :)
  • Ако не бях прочел още 20 решения на същата задача, никога нямаше да се сетя какво означава s в s_price. Защо си го съкратила? Ако някой ред стане прекалено дълъг винаги можеш да запазиш резултата от convert_to_bgn(first_price, first_currency) в променлива и да използваш това. :)
  • Има някаква асиметрия в price vs second_price и currency vs second_currency. Няма ли да е по-добре ако са first_price и second_price?
  • В Ruby всичко е израз и връща стойност - дори case. Тоест можеш да присвоиш резултата от case на променлива и после да го използваш. Можеш ли да използваш това знание, за да премахнеш малко дублиране на код? :)

Напомням, че до крайния срок можеш да ни изпращаш колкото искаш решения. :)

Михаела обнови решението на 11.10.2015 23:03 (преди над 8 години)

def convert_to_bgn(price, currency)
-new_price = price
- case currency
- when :usd
- new_price = price * 1.7408
- when :eur
- new_price = price * 1.9557
- when :gbp
- new_price = price * 2.6415
+price_in_bgn = price
+ case currency
+ when :usd
+ price_in_bgn = price * 1.7408
+ when :eur
+ price_in_bgn = price * 1.9557
+ when :gbp
+ price_in_bgn = price * 2.6415
end
- new_price.round(2)
+ price_in_bgn.round(2)
end
-def compare_prices(price, currency, s_price, s_currency)
- if convert_to_bgn(price, currency) > convert_to_bgn(s_price, s_currency)
- 1
- elsif convert_to_bgn(price, currency) == convert_to_bgn(s_price, s_currency)
- 0
- else
- -1
- end
+def compare_prices(first_price, first_currency, second_price, second_currency)
+ first_price_in_bgn = convert_to_bgn(first_price, first_currency)
+ second_price_in_bgn = convert_to_bgn(second_price, second_currency)
+ first_price_in_bgn <=> second_price_in_bgn
end