Решение на Първа задача от Теодор Иванов
Резултати
- 6 точки от тестове
- 0 бонус точки
- 6 точки общо
- 8 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
........ Finished in 0.00639 seconds 8 examples, 0 failures
История (6 версии и 6 коментара)
Теодор обнови решението на 11.10.2015 12:06 (преди над 9 години)
Здравей :)
Пусна ли си примерните тестове? Сигурен ли си, че compare_prices
работи?
Имам и някои стилови коментари:
- Имаш доста повторение на
price = price * число
. Напомням, че в Ruby всичко е израз и връща стойност - дориif
иcase
. Тоест можеш да присвоиш резултата отif
иcase
на променлива. Можеш ли да използваш това знание, за да премахнеш дублирането на код? :) - Около
*
трябва да има празни места. - Последното присвояване
price = price.round(2)
е безсмислено - променливатаprice
не я използваш след това. - Изтрий коментара на първия ред - не ни интересува как се е казвал файлът при теб и няма място в кода.
- Нямаш нужда от проверката в
compare_prices
. Прочети за оператора<=>
.
Напомням, че все още можеш да предадеш ново решение :)
Здравей,
след тестване с Rspec и файла sample_spec.rb първоначалният код (и функцията compare_prices) не даде грешки (2 examples, 0 failures).
Използвам round() метода на края на първата функция, защото по условие е дадено резултатът да се закръгля до втората цифра след десетичната запетая. Възможно е да не съм разбрал идеята напълно.
Мисля, че поправих останалите неща. Тествах кода и не показва грешки. Наложи се да въведа и else в условието на първата функция заради присвояването на резултата, възможно е да има по-добро решение за 'default' стойност за if. Ако все още има нещо, което създава проблеми, ще поработя по него.
Благодаря за помощта!
Теодор обнови решението на 11.10.2015 19:18 (преди над 9 години)
Стана по-добре стилово :)
Не е сигурно, че щом примерният тест минава, решението е напълно вярно :) Изпълни следния код, провери накрая a
на колко е равно и направи някакъв извод за твоя код:
def change_variable(a)
a = 5
end
a = 3
change_variable(a)
# a = ?
Казвам, че присвояването е безсмислено, не round
. Когато напишеш променлива = нещо
и нямаш повече код, очевидно можеш просто да напишеш нещо
. Това е така, защото нямаш код, който да използва променлива
, след като я промениш.
Между другото, result
е лошо име за променлива, защото не дава никаква информацията за това, че съдържа цена в bgn. Можеш ли да измислиш по-добро? :)
В този случай аз бих използвал case
, защото проверяваш каква е стойността на една променлива:
име = case currency
when :usd then price * 1.7408
when :eur then price * 1.9557
...
else price
end
Теодор обнови решението на 11.10.2015 21:08 (преди над 9 години)
Теодор обнови решението на 11.10.2015 21:09 (преди над 9 години)
Мисля, че разреших грешката във втората функция, от която идваше грешният резултат. Преминах към case решението и реших другите проблеми. :)
Супер :) Предполагам и на теб ти харесва повече сега? :)
Защо махна празните места около <=>
? :)
Да, мисля, че се получи добре в крайна сметка. Има още доста какво да науча от style guide-а.