Решение на Да си приготвим нещо за хапване от Светослав Атанасов

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

Към профила на Светослав Атанасов

Резултати

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

Код

def prepare_meal(number):
if number == 0:
return ""
current_meal = ""
if (number % 5 == 0):
if (number % 3 != 0):
return "eggs"
current_meal = "and eggs"
while (number % 3 == 0):
current_meal = "spam " + current_meal
number /= 3
return current_meal.strip()

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

..........
----------------------------------------------------------------------
Ran 10 tests in 0.001s

OK

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

Светослав обнови решението на 07.03.2012 02:08 (преди над 12 години)

+def prepare_meal(number):
+ if number == 0:
+ return ""
+ current_meal = ""
+ if (number % 5 == 0):
+ if (number % 3 != 0):
+ return "eggs"
+ current_meal = "and eggs"
+ while (number % 3 == 0):
+ current_meal = "spam " + current_meal
+ number /= 3
+ return current_meal.strip()

Здравей, Светослав.

Прави излишни проверки:

if not number:
    return ""

Тук например за какво точно проверяваш? Това ще върне False, само ако е подадена 0. Но твоята логика трябва да е подготвена да вади празен стринг и за други числа. Като 7, 13, 19 и прочее, които не се делят на 3 или на 5.

Поне 10 пъти сме казвали да не проверявате типът, на подадените аргументи. Ако са подадени грешни аргументи на подобен метод, проблемът си е на човекът, който ги подава. if isinstance(number, (int, float)): return make_spam(number) + bake_eggs(number)

Какво точно очакваш да се случи тук? return make_spam(len(number))

П.П.: Преди края на срока избери една от двете версии и пусни само нея. Ако го оставиш така тестовете ще проверят версия 1.

Здравей,

За версия 2 идеята ми беше, че в първата част от условието не е упоменато, че number трябва да е задължително число. И в случая примерно, ако въведеш стринг с 15 символа, той може да бъде разделен на секции от по 3 части; или някакви списъци, които също могат да бъдат групирани.

Но твоята логика трябва да е подготвена да вади празен стринг и за други числа. Като 7, 13, 19 и прочее, които не се делят на 3 или на 5.

Това се подразбира от spam_fest = "" във Версия 2 и от current_meal = "" във Версия 1.

Тук например за какво точно проверяваш? Това ще върне False, само ако е подадена 0.

Не си видял not-а, ще върне true, само ако е подадена 0. Ако няма тази проверка при подадена 0, по начина който е написан кода в момента, ще попаднем в безкраен цикъл.

Какво точно очакваш да се случи тук?

В първия случай, ако е подадено число, тогава се проверяваме и условието то да се дели и на 5 (там е упоменато, че number е число). Залепяме spam-a и eggs-a и излизаме. Ако не е число, тогава влизаме само за spam, за нещо което може да се раздели на равни части с по 3 на n-та елементи.

Явно имах прекалено много време да се хвана за всяка дума от условието :) Ако е лошо да е чак така, ще се върна към вариант 1.

П.П. Ще има ли второ домашно тази седмица?

"За версия 2 идеята ми беше, че в първата част от условието не е упоменато, че number трябва да е задължително число. И в случая примерно, ако въведеш стринг с 15 символа, той може да бъде разделен на секции от по 3 части; или някакви списъци, които също могат да бъдат групирани."

Естестверно, че ще тестваме само с коректни стойности. Няколко пъти споменаваме вече, че ако някой не знае как да използва написана от вас библиотека, проблемът си негов.

Иначе - да, вариант 1 ми харесва повече.

Ок е ако така искаш да си изградиш логиката, но в такъв случай: if number == 0.

Не се възползвай от това, че 0 == False, освен когато стойността е ок да се държи като булева. В първия момент, още преди да ти пусна коментар, реших че проверяваш дали ти е подаден изобщо аргумент и бях втрещен.