Решение на Първа задача от Костадин Петричков

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

Към профила на Костадин Петричков

Резултати

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

Код

def convert_to_bgn(price, currency)
case currency
when :usd then (price * 1.7408).round(2)
when :eur then (price * 1.9557).round(2)
when :gbp then (price * 2.6415).round(2)
when :bgn then (price * 1).round(2)
end
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.00751 seconds
8 examples, 0 failures

История (5 версии и 3 коментара)

Костадин обнови решението на 08.10.2015 23:40 (преди над 8 години)

+def convert_to_bgn(value, currency)
+
+ if currency == :usd
+ (value * 1.7408).round(2)
+ elsif currency == :eur
+ (value * 1.9557).round(2)
+ elsif currency == :gbp
+ (value * 2.6415).round(2)
+ elsif currency == :bgn
+ (value * 1).round(2)
+ end
+
+end
+
+def compare_prices(first_value, first_currency, second_value, second_currency)
+ first_price = convert_to_bgn(firstValue, firstCurrency)
+ second_price = convert_to_bgn(secondValue, secondCurrency)
+
+ first_price <=> second_price
+end

Костадин обнови решението на 08.10.2015 23:52 (преди над 8 години)

def convert_to_bgn(value, currency)
-
if currency == :usd
(value * 1.7408).round(2)
elsif currency == :eur
(value * 1.9557).round(2)
elsif currency == :gbp
(value * 2.6415).round(2)
elsif currency == :bgn
(value * 1).round(2)
end
end
def compare_prices(first_value, first_currency, second_value, second_currency)
first_price = convert_to_bgn(firstValue, firstCurrency)
second_price = convert_to_bgn(secondValue, secondCurrency)
first_price <=> second_price
+
end

Костадин обнови решението на 08.10.2015 23:53 (преди над 8 години)

def convert_to_bgn(value, currency)
if currency == :usd
(value * 1.7408).round(2)
elsif currency == :eur
(value * 1.9557).round(2)
elsif currency == :gbp
(value * 2.6415).round(2)
elsif currency == :bgn
(value * 1).round(2)
end
-
end
def compare_prices(first_value, first_currency, second_value, second_currency)
first_price = convert_to_bgn(firstValue, firstCurrency)
second_price = convert_to_bgn(secondValue, secondCurrency)
first_price <=> second_price
-
end

Опитвал ли си да пуснеш примерните тестове с този микс от snake_case и camelCase? :)

  • value обикновено не значи нищо (всичко е някакво value). Каква е разликата между first_value и first_price? Едното е value, а другото е price? Или и двете са price, но второто е гарантирано да е в лева? Опитай се името да рефлектира това.
  • Правиш една и съща проверка в поредица от if-else-ове. Може да искаш да погледнеш case ("switch"-ът в Ruby)
  • Нещо дребно, което подобрява естетически кода, е да подравняваш някои еднакви конструкции когато се срещат на съседни редове. Добави един space преди =-то на първия ред в compare_prices и виж дали няма да ти хареса повече.

Като цяло решението е добро

Костадин обнови решението на 09.10.2015 19:06 (преди над 8 години)

def convert_to_bgn(value, currency)
- if currency == :usd
- (value * 1.7408).round(2)
- elsif currency == :eur
- (value * 1.9557).round(2)
- elsif currency == :gbp
- (value * 2.6415).round(2)
- elsif currency == :bgn
- (value * 1).round(2)
+ case currency
+ when :usd
+ (value * 1.7408).round(2)
+ when :eur
+ (value * 1.9557).round(2)
+ when :gbp
+ (value * 2.6415).round(2)
+ when :bgn
+ (value * 1).round(2)
end
end
-def compare_prices(first_value, first_currency, second_value, second_currency)
- first_price = convert_to_bgn(firstValue, firstCurrency)
- second_price = convert_to_bgn(secondValue, secondCurrency)
+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 <=> second_price
+ first_price_in_bgn <=> second_price_in_bgn
end

Благодаря за коментарите.

Адресирани са.

Още, докато писах задачата, се почудих дали да не ползвам switch, но тъй като не сме го взимали на лекции, реших че може да изглежда натегаческо, едва ли не :Д

А относно променливите - чак днес прочетох че конвенцията била за snake_case, когато попринцип ползвам camelCase. Промених имената им също.

Поздрави, Костадин

Няма такова нещо като натегачестване, радваме се когато някой прояви интерес отвъд нещата, за които ни е стигнало времето (стига да ги приложи вярно)

  • Можеш да използваш и едноредовата версия (when x then y)
  • Това value го смени и в convert_to_bgn

Иначе е супер

Костадин обнови решението на 12.10.2015 11:35 (преди над 8 години)

-def convert_to_bgn(value, currency)
+def convert_to_bgn(price, currency)
case currency
- when :usd
- (value * 1.7408).round(2)
- when :eur
- (value * 1.9557).round(2)
- when :gbp
- (value * 2.6415).round(2)
- when :bgn
- (value * 1).round(2)
+ when :usd then (price * 1.7408).round(2)
+ when :eur then (price * 1.9557).round(2)
+ when :gbp then (price * 2.6415).round(2)
+ when :bgn then (price * 1).round(2)
end
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