Решение на Хороскоп от Александър Тахчиев

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

Към профила на Александър Тахчиев

Резултати

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

Код

def helper(month, day, all_months_and_sign):
if month == 12 and day > 21:
return "Козирог"
elif month * 100 + day <= all_months_and_sign[0][0]:
return all_months_and_sign[0][1]
else:
return helper(month, day, all_months_and_sign[1:])
def what_is_my_sign(day, month):
return helper(
month, day, [(119, "Козирог"), (218, "Водолей"), (320, "Рибa"),
(420, "Овен"), (520, "Телец"), (620, "Близнаци"),
(721, "Рак"), (822, "Лъв"), (922, "Дева"),
(1022, "Везни"), (1121, "Скорпион"), (1221, "Стрелец")])

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

.........F.....
======================================================================
FAIL: test_pisces (test.HoroscopeTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tmp/d20130307-16279-13yhfag/test.py", line 41, in test_pisces
    self.assertEqual(solution.what_is_my_sign(9, 3), 'Риби')
AssertionError: 'Рибa' != 'Риби'
- Рибa
?    ^
+ Риби
?    ^


----------------------------------------------------------------------
Ran 15 tests in 0.003s

FAILED (failures=1)

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

Александър обнови решението на 03.03.2013 18:13 (преди над 11 години)

+def helerfunc1(month, day, all_months_and_sign):
+ if month == 12 and day > 21: # може да се оптимизара
+ return "Козирог"
+ elif month * 100 + day <= all_months_and_sign[0][0]: # Може да се оптимизира
+ return all_months_and_sign[0][1]
+ elif len(all_months_and_sign) != 1:
+ return helerfunc1(month, day, all_months_and_sign[1:])
+ else:
+ return "Това е един тъжен живот на човек без зодия!!!"
+
+
+def what_is_my_sign(day, month):
+ return helerfunc1(
+ month, day, [(119, "Козирог"), (218, "Водолей"), (320, "Рибa"),
+ (420, "Овен"), (520, "Телец"), (620, "Близнаци"),
+ (721, "Рак"), (822, "Лъв"), (922, "Дева"),
+ (1022, "Везни"), (1121, "Скорпион"), (1221, "Стрелец")])

Какво значи helerfunc1? Защо не дефинираш като отделна колекция третия аргумент. Добра идея е да го изкараш като константа, извън която и да е функция дори.

Изрично ви казахме да не мислите за невалиден input. Няма човек без зодия :)

"Какво значи helerfunc1?", значи helperfunc1, без р. Бих се радвал, ако ми дадете примерни имена, как би трябвало да се казва тази функция? По скиим ни учиха да ги наричаме хелпер и реших, че няма да има проблем(поради някаква причина).

Относно второто Ви изречение, не разбирам дали е констатация или въпрос, но и в двата случая не знам какво е "отделна колекция".

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

За последното, примете искрените ми извинения,че не съобразих този факт.

Александър обнови решението на 04.03.2013 08:19 (преди над 11 години)

-def helerfunc1(month, day, all_months_and_sign):
+def helperfunc1(month, day, all_months_and_sign):
if month == 12 and day > 21: # може да се оптимизара
return "Козирог"
elif month * 100 + day <= all_months_and_sign[0][0]: # Може да се оптимизира
return all_months_and_sign[0][1]
elif len(all_months_and_sign) != 1:
- return helerfunc1(month, day, all_months_and_sign[1:])
+ return helperfunc1(month, day, all_months_and_sign[1:])
else:
- return "Това е един тъжен живот на човек без зодия!!!"
+ return "Грешка във Вашият инпът!!!"
def what_is_my_sign(day, month):
- return helerfunc1(
+ return helperfunc1(
month, day, [(119, "Козирог"), (218, "Водолей"), (320, "Рибa"),
(420, "Овен"), (520, "Телец"), (620, "Близнаци"),
(721, "Рак"), (822, "Лъв"), (922, "Дева"),
(1022, "Везни"), (1121, "Скорпион"), (1221, "Стрелец")])

Александър обнови решението на 04.03.2013 08:24 (преди над 11 години)

def helperfunc1(month, day, all_months_and_sign):
if month == 12 and day > 21: # може да се оптимизара
return "Козирог"
elif month * 100 + day <= all_months_and_sign[0][0]: # Може да се оптимизира
return all_months_and_sign[0][1]
elif len(all_months_and_sign) != 1:
return helperfunc1(month, day, all_months_and_sign[1:])
else:
- return "Грешка във Вашият инпът!!!"
+ return "Грешка във Вашия инпът!!!"
def what_is_my_sign(day, month):
return helperfunc1(
month, day, [(119, "Козирог"), (218, "Водолей"), (320, "Рибa"),
(420, "Овен"), (520, "Телец"), (620, "Близнаци"),
(721, "Рак"), (822, "Лъв"), (922, "Дева"),
(1022, "Везни"), (1121, "Скорпион"), (1221, "Стрелец")])
  • На функция с име helper бих се навил. Но защо func - очевидно е функция, а номерирането отзад е доста странно. Нямаш втора helper функция.
  • Третият аргумент, който ѝ подаваш е колекция (списък). Въпросът ми беше защо просто не го дефинираш на някакво име. Но не е болка за умиране. Дори в твоя случай е ок, като се замисля.
  • Ужасна идея е да се слагат коментари из код на python. Ако кодът сам не говори за себе си - или правиш нещо сложно или имаш проблем. Ти не правиш нищо сложно.
  • "От друга страна така се влиза в преразход на памет" - от това не се интересуваш. Ще говорим скоро за това кога нещо трябва да се опитмизира и кога не. В твоя случай - не трябва. Пиши кодът с идеята да бъде максимално четим. Докато използваната памет не стане проблем, не е проблем :)
  • Свободния else го махни. Ако има начин да се попадне на него при валидни входящи данни, това трябва да се оправи. Ако го удряш само при невалидни, не ти трябва.

Александър обнови решението на 04.03.2013 15:31 (преди над 11 години)

-def helperfunc1(month, day, all_months_and_sign):
- if month == 12 and day > 21: # може да се оптимизара
+def helper(month, day, all_months_and_sign):
+ if month == 12 and day > 21:
return "Козирог"
- elif month * 100 + day <= all_months_and_sign[0][0]: # Може да се оптимизира
+ elif month * 100 + day <= all_months_and_sign[0][0]:
return all_months_and_sign[0][1]
- elif len(all_months_and_sign) != 1:
- return helperfunc1(month, day, all_months_and_sign[1:])
else:
- return "Грешка във Вашия инпът!!!"
+ return helper(month, day, all_months_and_sign[1:])
def what_is_my_sign(day, month):
- return helperfunc1(
+ return helper(
month, day, [(119, "Козирог"), (218, "Водолей"), (320, "Рибa"),
(420, "Овен"), (520, "Телец"), (620, "Близнаци"),
(721, "Рак"), (822, "Лъв"), (922, "Дева"),
(1022, "Везни"), (1121, "Скорпион"), (1221, "Стрелец")])