Решение на Хороскоп от Щилиян Харбов

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

Към профила на Щилиян Харбов

Резултати

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

Код

def what_is_my_sign(day, month):
"""
>>> what_is_my_sign(5, 8)
'Лъв'
>>> what_is_my_sign(29, 1)
'Водолей'
>>> what_is_my_sign(30, 6)
'Рак'
>>> what_is_my_sign(31, 5)
'Близнаци'
>>> what_is_my_sign(2, 2)
'Водолей'
>>> what_is_my_sign(month=5, day=8)
'Телец'
>>> what_is_my_sign(9, month=1)
'Козирог'
"""
return ((20 < day < 32 and month == 3) or
(0 < day < 21 and month == 4)) * "Овен" +\
((20 < day < 31 and month == 4) or
(0 < day < 21 and month == 5)) * "Телец" +\
((20 < day < 32 and month == 5) or
(0 < day < 21 and month == 6)) * "Близнаци" +\
((20 < day < 31 and month == 6) or
(0 < day < 22 and month == 7)) * "Рак" +\
((21 < day < 32 and month == 7) or
(0 < day < 23 and month == 8)) * "Лъв" +\
((22 < day < 32 and month == 8) or
(0 < day < 23 and month == 9)) * "Дева" +\
((22 < day < 31 and month == 9) or
(0 < day < 23 and month == 10)) * "Везни" +\
((22 < day < 32 and month == 10) or
(0 < day < 22 and month == 11)) * "Скорпион" +\
((21 < day < 31 and month == 11) or
(0 < day < 22 and month == 12)) * "Стрелец" +\
((21 < day < 32 and month == 12) or
(0 < day < 20 and month == 1)) * "Козирог" +\
((19 < day < 32 and month == 1) or
(0 < day < 19 and month == 2)) * "Водолей" +\
((18 < day < 30 and month == 2) or
(0 < day < 21 and month == 3)) * "Риби"

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

...............
----------------------------------------------------------------------
Ran 15 tests in 0.002s

OK

История (8 версии и 11 коментара)

Щилиян обнови решението на 02.03.2013 03:01 (преди над 11 години)

+def what_is_my_sign(day, month):
+ if (day in range(21, 31 + 1) and month == 3) or\
+ (day in range(1, 20 + 1) and month == 4):
+ return "Овен"
+ elif (day in range(21, 30 + 1) and month == 4) or\
+ (day in range(1, 20 + 1) and month == 5):
+ return "Телец"
+ elif (day in range(21, 31 + 1) and month == 5) or\
+ (day in range(1, 20 + 1) and month == 6):
+ return "Близнаци"
+ elif (day in range(21, 30 + 1) and month == 6) or\
+ (day in range(1, 21 + 1) and month == 7):
+ return "Рак"
+ elif (day in range(22, 31 + 1) and month == 7) or\
+ (day in range(1, 22 + 1) and month == 8):
+ return "Лъв"
+ elif (day in range(23, 31 + 1) and month == 8) or\
+ (day in range(1, 22 + 1) and month == 9):
+ return "Дева"
+ elif (day in range(23, 30 + 1) and month == 9) or\
+ (day in range(1, 22 + 1) and month == 10):
+ return "Везни"
+ elif (day in range(23, 31 + 1) and month == 10) or\
+ (day in range(1, 21 + 1) and month == 11):
+ return "Скорпион"
+ elif (day in range(22, 30 + 1) and month == 11) or\
+ (day in range(1, 21 + 1) and month == 12):
+ return "Стрелец"
+ elif (day in range(22, 31 + 1) and month == 12) or\
+ (day in range(1, 19 + 1) and month == 1):
+ return "Козирог"
+ elif (day in range(20, 31 + 1) and month == 1) or\
+ (day in range(1, 18 + 1) and month == 2):
+ return "Водолей"
+ elif (day in range(19, 29 + 1) and month == 2) or\
+ (day in range(1, 20 + 1) and month == 3):
+ return "Риби"

Щилиян обнови решението на 02.03.2013 03:05 (преди над 11 години)

def what_is_my_sign(day, month):
- if (day in range(21, 31 + 1) and month == 3) or\
- (day in range(1, 20 + 1) and month == 4):
+ if (day in range(21, 32) and month == 3) or\
+ (day in range(1, 21) and month == 4):
return "Овен"
- elif (day in range(21, 30 + 1) and month == 4) or\
- (day in range(1, 20 + 1) and month == 5):
+ elif (day in range(21, 31) and month == 4) or\
+ (day in range(1, 21) and month == 5):
return "Телец"
- elif (day in range(21, 31 + 1) and month == 5) or\
- (day in range(1, 20 + 1) and month == 6):
+ elif (day in range(21, 32) and month == 5) or\
+ (day in range(1, 21) and month == 6):
return "Близнаци"
- elif (day in range(21, 30 + 1) and month == 6) or\
- (day in range(1, 21 + 1) and month == 7):
+ elif (day in range(21, 31) and month == 6) or\
+ (day in range(1, 22) and month == 7):
return "Рак"
- elif (day in range(22, 31 + 1) and month == 7) or\
- (day in range(1, 22 + 1) and month == 8):
+ elif (day in range(22, 32) and month == 7) or\
+ (day in range(1, 23) and month == 8):
return "Лъв"
- elif (day in range(23, 31 + 1) and month == 8) or\
- (day in range(1, 22 + 1) and month == 9):
+ elif (day in range(23, 32) and month == 8) or\
+ (day in range(1, 23) and month == 9):
return "Дева"
- elif (day in range(23, 30 + 1) and month == 9) or\
- (day in range(1, 22 + 1) and month == 10):
+ elif (day in range(23, 31) and month == 9) or\
+ (day in range(1, 23) and month == 10):
return "Везни"
- elif (day in range(23, 31 + 1) and month == 10) or\
- (day in range(1, 21 + 1) and month == 11):
+ elif (day in range(23, 32) and month == 10) or\
+ (day in range(1, 22) and month == 11):
return "Скорпион"
- elif (day in range(22, 30 + 1) and month == 11) or\
- (day in range(1, 21 + 1) and month == 12):
+ elif (day in range(22, 31) and month == 11) or\
+ (day in range(1, 22) and month == 12):
return "Стрелец"
- elif (day in range(22, 31 + 1) and month == 12) or\
- (day in range(1, 19 + 1) and month == 1):
+ elif (day in range(22, 32) and month == 12) or\
+ (day in range(1, 20) and month == 1):
return "Козирог"
- elif (day in range(20, 31 + 1) and month == 1) or\
- (day in range(1, 18 + 1) and month == 2):
+ elif (day in range(20, 32) and month == 1) or\
+ (day in range(1, 19) and month == 2):
return "Водолей"
- elif (day in range(19, 29 + 1) and month == 2) or\
- (day in range(1, 20 + 1) and month == 3):
+ elif (day in range(19, 30) and month == 2) or\
+ (day in range(1, 21) and month == 3):
return "Риби"

Щилиян обнови решението на 02.03.2013 03:45 (преди над 11 години)

def what_is_my_sign(day, month):
- if (day in range(21, 32) and month == 3) or\
- (day in range(1, 21) and month == 4):
+ if ((day in range(21, 32) and month == 3) or
+ (day in range(1, 21) and month == 4)):
return "Овен"
- elif (day in range(21, 31) and month == 4) or\
- (day in range(1, 21) and month == 5):
+ elif ((day in range(21, 31) and month == 4) or
+ (day in range(1, 21) and month == 5)):
return "Телец"
- elif (day in range(21, 32) and month == 5) or\
- (day in range(1, 21) and month == 6):
+ elif ((day in range(21, 32) and month == 5) or
+ (day in range(1, 21) and month == 6)):
return "Близнаци"
- elif (day in range(21, 31) and month == 6) or\
- (day in range(1, 22) and month == 7):
+ elif ((day in range(21, 31) and month == 6) or
+ (day in range(1, 22) and month == 7)):
return "Рак"
- elif (day in range(22, 32) and month == 7) or\
- (day in range(1, 23) and month == 8):
+ elif ((day in range(22, 32) and month == 7) or
+ (day in range(1, 23) and month == 8)):
return "Лъв"
- elif (day in range(23, 32) and month == 8) or\
- (day in range(1, 23) and month == 9):
+ elif ((day in range(23, 32) and month == 8) or
+ (day in range(1, 23) and month == 9)):
return "Дева"
- elif (day in range(23, 31) and month == 9) or\
- (day in range(1, 23) and month == 10):
+ elif ((day in range(23, 31) and month == 9) or
+ (day in range(1, 23) and month == 10)):
return "Везни"
- elif (day in range(23, 32) and month == 10) or\
- (day in range(1, 22) and month == 11):
+ elif ((day in range(23, 32) and month == 10) or
+ (day in range(1, 22) and month == 11)):
return "Скорпион"
- elif (day in range(22, 31) and month == 11) or\
- (day in range(1, 22) and month == 12):
+ elif ((day in range(22, 31) and month == 11) or
+ (day in range(1, 22) and month == 12)):
return "Стрелец"
- elif (day in range(22, 32) and month == 12) or\
- (day in range(1, 20) and month == 1):
+ elif ((day in range(22, 32) and month == 12) or
+ (day in range(1, 20) and month == 1)):
return "Козирог"
- elif (day in range(20, 32) and month == 1) or\
- (day in range(1, 19) and month == 2):
+ elif ((day in range(20, 32) and month == 1) or
+ (day in range(1, 19) and month == 2)):
return "Водолей"
- elif (day in range(19, 30) and month == 2) or\
- (day in range(1, 21) and month == 3):
+ elif ((day in range(19, 30) and month == 2) or
- return "Риби"
+ (day in range(1, 21) and month == 3)):
+ return "Риби"

Щилиян обнови решението на 02.03.2013 04:40 (преди над 11 години)

def what_is_my_sign(day, month):
- if ((day in range(21, 32) and month == 3) or
- (day in range(1, 21) and month == 4)):
+ if ((day >= 21 and day < 32 and month == 3) or
+ (day >= 1 and day < 21 and month == 4)):
return "Овен"
- elif ((day in range(21, 31) and month == 4) or
- (day in range(1, 21) and month == 5)):
+ elif ((day >= 21 and day < 31 and month == 4) or
+ (day >= 1 and day < 21 and month == 5)):
return "Телец"
- elif ((day in range(21, 32) and month == 5) or
- (day in range(1, 21) and month == 6)):
+ elif ((day >= 21 and day < 32 and month == 5) or
+ (day >= 1 and day < 21 and month == 6)):
return "Близнаци"
- elif ((day in range(21, 31) and month == 6) or
- (day in range(1, 22) and month == 7)):
+ elif ((day >= 21 and day < 31 and month == 6) or
+ (day >= 1 and day < 22 and month == 7)):
return "Рак"
- elif ((day in range(22, 32) and month == 7) or
- (day in range(1, 23) and month == 8)):
+ elif ((day >= 22 and day < 32 and month == 7) or
+ (day >= 1 and day < 23 and month == 8)):
return "Лъв"
- elif ((day in range(23, 32) and month == 8) or
- (day in range(1, 23) and month == 9)):
+ elif ((day >= 23 and day < 32 and month == 8) or
+ (day >= 1 and day < 23 and month == 9)):
return "Дева"
- elif ((day in range(23, 31) and month == 9) or
- (day in range(1, 23) and month == 10)):
+ elif ((day >= 23 and day < 31 and month == 9) or
+ (day >= 1 and day < 23 and month == 10)):
return "Везни"
- elif ((day in range(23, 32) and month == 10) or
- (day in range(1, 22) and month == 11)):
+ elif ((day >= 23 and day < 32 and month == 10) or
+ (day >= 1 and day < 22 and month == 11)):
return "Скорпион"
- elif ((day in range(22, 31) and month == 11) or
- (day in range(1, 22) and month == 12)):
+ elif ((day >= 22 and day < 31 and month == 11) or
+ (day >= 1 and day < 22 and month == 12)):
return "Стрелец"
- elif ((day in range(22, 32) and month == 12) or
- (day in range(1, 20) and month == 1)):
+ elif ((day >= 22 and day < 32 and month == 12) or
+ (day >= 1 and day < 20 and month == 1)):
return "Козирог"
- elif ((day in range(20, 32) and month == 1) or
- (day in range(1, 19) and month == 2)):
+ elif ((day >= 20 and day < 32 and month == 1) or
+ (day >= 1 and day < 19 and month == 2)):
return "Водолей"
- elif ((day in range(19, 30) and month == 2) or
- (day in range(1, 21) and month == 3)):
+ elif ((day >= 19 and day < 30 and month == 2) or
+ (day >= 1 and day < 21 and month == 3)):
return "Риби"

Помисли как да го направиш без толкова много if-ове. Така определено не е елегантно.

Освен това при if-овете в Python не са нужни тези външни скоби.

  elif ((day >= 19 and day < 30 and month == 2) or
   (day >= 1 and day < 21 and month == 3)):

е същото като

  elif (day >= 19 and day < 30 and month == 2) or
  (day >= 1 and day < 21 and month == 3):

Скобите ги сложих щото нещо съм се заблудил с PEP8, че трябва да е цялото заградено, но нищо де дали си минава теста в конзолата с pep8. От друга страна примерно философска целия израз в кръгли скобки означава, че двата предиката са от домейна на проблема така, че освен естетически проблем друг не виждам. Колкото до елегантността с 12 if за 12-те зодии мисля, че си е достатъчно рационално решение и всеки ще го разбере от пръв поглед, не че не мога да напиша решението без нито един if (Всъщност след като си свърша монолога ще ти го напиша, щом те дразнят толкова тези if-ве с else-ве). Можеше да седна да мисля някаква магична хеш функция или друга щуротия, но после пък щеше да има хохо от къде се взеха тези магични числа за ключове на речника и т.н. ....

Щилиян обнови решението на 03.03.2013 03:37 (преди над 11 години)

def what_is_my_sign(day, month):
- if ((day >= 21 and day < 32 and month == 3) or
- (day >= 1 and day < 21 and month == 4)):
+ return ((day >= 21 and day < 32 and month == 3) or
- return "Овен"
+ (day >= 1 and day < 21 and month == 4)) * "Овен" +\
- elif ((day >= 21 and day < 31 and month == 4) or
+ ((day >= 21 and day < 31 and month == 4) +
- (day >= 1 and day < 21 and month == 5)):
+ (day >= 1 and day < 21 and month == 5)) * "Телец" +\
- return "Телец"
+ ((day >= 21 and day < 32 and month == 5) or
- elif ((day >= 21 and day < 32 and month == 5) or
+ (day >= 1 and day < 21 and month == 6)) * "Близнаци" +\
- (day >= 1 and day < 21 and month == 6)):
+ ((day >= 21 and day < 31 and month == 6) or
- return "Близнаци"
+ (day >= 1 and day < 22 and month == 7)) * "Рак" +\
- elif ((day >= 21 and day < 31 and month == 6) or
+ ((day >= 22 and day < 32 and month == 7) or
- (day >= 1 and day < 22 and month == 7)):
+ (day >= 1 and day < 23 and month == 8)) * "Лъв" +\
- return "Рак"
+ ((day >= 23 and day < 32 and month == 8) or
- elif ((day >= 22 and day < 32 and month == 7) or
+ (day >= 1 and day < 23 and month == 9)) * "Дева" +\
- (day >= 1 and day < 23 and month == 8)):
+ ((day >= 23 and day < 31 and month == 9) or
- return "Лъв"
+ (day >= 1 and day < 23 and month == 10)) * "Везни" +\
- elif ((day >= 23 and day < 32 and month == 8) or
+ ((day >= 23 and day < 32 and month == 10) or
- (day >= 1 and day < 23 and month == 9)):
+ (day >= 1 and day < 22 and month == 11)) * "Скорпион" +\
- return "Дева"
+ ((day >= 22 and day < 31 and month == 11) or
- elif ((day >= 23 and day < 31 and month == 9) or
+ (day >= 1 and day < 22 and month == 12)) * "Стрелец" +\
- (day >= 1 and day < 23 and month == 10)):
+ ((day >= 22 and day < 32 and month == 12) or
- return "Везни"
+ (day >= 1 and day < 20 and month == 1)) * "Козирог" +\
- elif ((day >= 23 and day < 32 and month == 10) or
+ ((day >= 20 and day < 32 and month == 1) or
- (day >= 1 and day < 22 and month == 11)):
+ (day >= 1 and day < 19 and month == 2)) * "Водолей" +\
- return "Скорпион"
+ ((day >= 19 and day < 30 and month == 2) or
- elif ((day >= 22 and day < 31 and month == 11) or
+ (day >= 1 and day < 21 and month == 3)) * "Риби"
- (day >= 1 and day < 22 and month == 12)):
- return "Стрелец"
- elif ((day >= 22 and day < 32 and month == 12) or
- (day >= 1 and day < 20 and month == 1)):
- return "Козирог"
- elif ((day >= 20 and day < 32 and month == 1) or
- (day >= 1 and day < 19 and month == 2)):
- return "Водолей"
- elif ((day >= 19 and day < 30 and month == 2) or
- (day >= 1 and day < 21 and month == 3)):
- return "Риби"

Щилиян обнови решението на 03.03.2013 03:40 (преди над 11 години)

def what_is_my_sign(day, month):
return ((day >= 21 and day < 32 and month == 3) or
(day >= 1 and day < 21 and month == 4)) * "Овен" +\
- ((day >= 21 and day < 31 and month == 4) +
+ ((day >= 21 and day < 31 and month == 4) or
(day >= 1 and day < 21 and month == 5)) * "Телец" +\
((day >= 21 and day < 32 and month == 5) or
(day >= 1 and day < 21 and month == 6)) * "Близнаци" +\
((day >= 21 and day < 31 and month == 6) or
(day >= 1 and day < 22 and month == 7)) * "Рак" +\
((day >= 22 and day < 32 and month == 7) or
(day >= 1 and day < 23 and month == 8)) * "Лъв" +\
((day >= 23 and day < 32 and month == 8) or
(day >= 1 and day < 23 and month == 9)) * "Дева" +\
((day >= 23 and day < 31 and month == 9) or
(day >= 1 and day < 23 and month == 10)) * "Везни" +\
((day >= 23 and day < 32 and month == 10) or
(day >= 1 and day < 22 and month == 11)) * "Скорпион" +\
((day >= 22 and day < 31 and month == 11) or
(day >= 1 and day < 22 and month == 12)) * "Стрелец" +\
((day >= 22 and day < 32 and month == 12) or
(day >= 1 and day < 20 and month == 1)) * "Козирог" +\
((day >= 20 and day < 32 and month == 1) or
(day >= 1 and day < 19 and month == 2)) * "Водолей" +\
((day >= 19 and day < 30 and month == 2) or
(day >= 1 and day < 21 and month == 3)) * "Риби"

Щилиян обнови решението на 03.03.2013 04:08 (преди над 11 години)

def what_is_my_sign(day, month):
- return ((day >= 21 and day < 32 and month == 3) or
- (day >= 1 and day < 21 and month == 4)) * "Овен" +\
+ """
- ((day >= 21 and day < 31 and month == 4) or
+ >>> what_is_my_sign(5, 8)
- (day >= 1 and day < 21 and month == 5)) * "Телец" +\
+ 'Лъв'
- ((day >= 21 and day < 32 and month == 5) or
+ >>> what_is_my_sign(29, 1)
- (day >= 1 and day < 21 and month == 6)) * "Близнаци" +\
+ 'Водолей'
- ((day >= 21 and day < 31 and month == 6) or
+ >>> what_is_my_sign(30, 6)
- (day >= 1 and day < 22 and month == 7)) * "Рак" +\
+ 'Рак'
- ((day >= 22 and day < 32 and month == 7) or
+ >>> what_is_my_sign(31, 5)
- (day >= 1 and day < 23 and month == 8)) * "Лъв" +\
+ 'Близнаци'
- ((day >= 23 and day < 32 and month == 8) or
+ >>> what_is_my_sign(2, 2)
- (day >= 1 and day < 23 and month == 9)) * "Дева" +\
+ 'Водолей'
- ((day >= 23 and day < 31 and month == 9) or
+ >>> what_is_my_sign(month=5, day=8)
- (day >= 1 and day < 23 and month == 10)) * "Везни" +\
+ 'Телец'
- ((day >= 23 and day < 32 and month == 10) or
+ >>> what_is_my_sign(9, month=1)
- (day >= 1 and day < 22 and month == 11)) * "Скорпион" +\
+ 'Козирог'
- ((day >= 22 and day < 31 and month == 11) or
+ """
- (day >= 1 and day < 22 and month == 12)) * "Стрелец" +\
+ return ((day > 20 and day < 32 and month == 3) or
- ((day >= 22 and day < 32 and month == 12) or
+ (day > 0 and day < 21 and month == 4)) * "Овен" +\
- (day >= 1 and day < 20 and month == 1)) * "Козирог" +\
+ ((day > 20 and day < 31 and month == 4) or
- ((day >= 20 and day < 32 and month == 1) or
+ (day > 0 and day < 21 and month == 5)) * "Телец" +\
- (day >= 1 and day < 19 and month == 2)) * "Водолей" +\
+ ((day > 20 and day < 32 and month == 5) or
- ((day >= 19 and day < 30 and month == 2) or
+ (day > 0 and day < 21 and month == 6)) * "Близнаци" +\
- (day >= 1 and day < 21 and month == 3)) * "Риби"
+ ((day > 20 and day < 31 and month == 6) or
+ (day > 0 and day < 22 and month == 7)) * "Рак" +\
+ ((day > 21 and day < 32 and month == 7) or
+ (day > 0 and day < 23 and month == 8)) * "Лъв" +\
+ ((day > 22 and day < 32 and month == 8) or
+ (day > 0 and day < 23 and month == 9)) * "Дева" +\
+ ((day > 22 and day < 31 and month == 9) or
+ (day > 0 and day < 23 and month == 10)) * "Везни" +\
+ ((day > 22 and day < 32 and month == 10) or
+ (day > 0 and day < 22 and month == 11)) * "Скорпион" +\
+ ((day > 21 and day < 31 and month == 11) or
+ (day > 0 and day < 22 and month == 12)) * "Стрелец" +\
+ ((day > 21 and day < 32 and month == 12) or
+ (day > 0 and day < 20 and month == 1)) * "Козирог" +\
+ ((day > 19 and day < 32 and month == 1) or
+ (day > 0 and day < 19 and month == 2)) * "Водолей" +\
+ ((day > 18 and day < 30 and month == 2) or
+ (day > 0 and day < 21 and month == 3)) * "Риби"

Исках да ти подскажа да използваш някоя от колекциите в Питон и да използваш някой от loop-овете за да търсиш съответните стойности в нея.

Ще осъзнаеш по-нататък че такъв тип код обикновено е лоша идея, защото:

  1. Доста по-трудно се променя логиката му ако нещо е объркано
  2. Ако използваш колекции за подобни константни таблични данни това може да ти помогне за споделянето на код между множество функции когато имаш по-голяма задача.

Щилиян обнови решението на 03.03.2013 17:26 (преди над 11 години)

def what_is_my_sign(day, month):
"""
>>> what_is_my_sign(5, 8)
'Лъв'
>>> what_is_my_sign(29, 1)
'Водолей'
>>> what_is_my_sign(30, 6)
'Рак'
>>> what_is_my_sign(31, 5)
'Близнаци'
>>> what_is_my_sign(2, 2)
'Водолей'
>>> what_is_my_sign(month=5, day=8)
'Телец'
>>> what_is_my_sign(9, month=1)
'Козирог'
"""
- return ((day > 20 and day < 32 and month == 3) or
- (day > 0 and day < 21 and month == 4)) * "Овен" +\
+ return ((20 < day < 32 and month == 3) or
- ((day > 20 and day < 31 and month == 4) or
+ (0 < day < 21 and month == 4)) * "Овен" +\
- (day > 0 and day < 21 and month == 5)) * "Телец" +\
+ ((20 < day < 31 and month == 4) or
- ((day > 20 and day < 32 and month == 5) or
+ (0 < day < 21 and month == 5)) * "Телец" +\
- (day > 0 and day < 21 and month == 6)) * "Близнаци" +\
+ ((20 < day < 32 and month == 5) or
- ((day > 20 and day < 31 and month == 6) or
+ (0 < day < 21 and month == 6)) * "Близнаци" +\
- (day > 0 and day < 22 and month == 7)) * "Рак" +\
+ ((20 < day < 31 and month == 6) or
- ((day > 21 and day < 32 and month == 7) or
+ (0 < day < 22 and month == 7)) * "Рак" +\
- (day > 0 and day < 23 and month == 8)) * "Лъв" +\
+ ((21 < day < 32 and month == 7) or
- ((day > 22 and day < 32 and month == 8) or
+ (0 < day < 23 and month == 8)) * "Лъв" +\
- (day > 0 and day < 23 and month == 9)) * "Дева" +\
+ ((22 < day < 32 and month == 8) or
- ((day > 22 and day < 31 and month == 9) or
+ (0 < day < 23 and month == 9)) * "Дева" +\
- (day > 0 and day < 23 and month == 10)) * "Везни" +\
+ ((22 < day < 31 and month == 9) or
- ((day > 22 and day < 32 and month == 10) or
+ (0 < day < 23 and month == 10)) * "Везни" +\
- (day > 0 and day < 22 and month == 11)) * "Скорпион" +\
+ ((22 < day < 32 and month == 10) or
- ((day > 21 and day < 31 and month == 11) or
+ (0 < day < 22 and month == 11)) * "Скорпион" +\
- (day > 0 and day < 22 and month == 12)) * "Стрелец" +\
+ ((21 < day < 31 and month == 11) or
- ((day > 21 and day < 32 and month == 12) or
+ (0 < day < 22 and month == 12)) * "Стрелец" +\
- (day > 0 and day < 20 and month == 1)) * "Козирог" +\
+ ((21 < day < 32 and month == 12) or
- ((day > 19 and day < 32 and month == 1) or
+ (0 < day < 20 and month == 1)) * "Козирог" +\
- (day > 0 and day < 19 and month == 2)) * "Водолей" +\
+ ((19 < day < 32 and month == 1) or
- ((day > 18 and day < 30 and month == 2) or
+ (0 < day < 19 and month == 2)) * "Водолей" +\
- (day > 0 and day < 21 and month == 3)) * "Риби"
+ ((18 < day < 30 and month == 2) or
+ (0 < day < 21 and month == 3)) * "Риби"

Съгласен, че е лоша идея, ако се ползва на повече места, но понеже домашната е за 1 функция и затова така :) иначе бих използвал namedtuple() И версиите станаха осем защото гледам, че в питончето day > 1 and day < 20 може да се напише 1 < day < 20. Можеше да го включите в материалите, струва ми се доста интересно :)

А има ли разлика в оценяването между начините на решение ?

Смисъл такъв, че аз си се забавлявам да направя решение само израз, но дали, ако вие очаквате да видите нещо определено и не го видите това определено нещо, то аз ще получа по-малко точки?

Добре де, как може да предадеш lisp-подобен код и да твърдиш, че няма излишни скоби!? Да не говорим, че караш курса за втора година и вече би трябвало да имаш понятие от четим код на питон и как се използват колекциите в него.

Доводът "ама те са само 12 еднакви if-а и са супер елегантни" дори не го коментирам. -1т.

Защо не отговори, когато питах за типа решения, а директно -1 само на мене ???

++ Коментирам финалната функция ++

1: (1 > 0) or (0 > 1) * "sign" ||| 2:((1 > 0) or (0 > 1)) * "sign"

Скобите ми трябват, защото нямаше да работи решението. Първото се оценява до True второто до 'sign', т.е. без скоби няма как да получа съответната зодия и функцията винаги щеше да връща 1, защото щях да събирам True + 11 * False = 1. Аналогично за втория случай 'sign' + 12 * '' = 'sign'. Ако не вярваш пусни си ги в интерпретатора двата израза и после пак ми кажи, че са излишни

Термин ЕЛЕГАНТНО в информатика не съществува. Това е дума от модата и етикета. Предполагам, че заради неугледния вид според другите професии, на първите програмисти същите са пренесли думата в кода, за да покажат ... нещо си ... че имат други виждания. Така, че дефинирайте на сайта какво е елегантно, за да можете да виждате това. Иначе си остава едно субективно усещане, което няма място в точна наука.

НИКЪДЕ не съм използвал "СУПЕР ЕЛЕГАНТНИ", използвал съм "РАЦИОНАЛНО", а защо рационално? Бях си направил шаблонче за булевата логика, отворих си редактора Ctrl + C / Ctrl + V 12 пъти и попълних от календара. Ясно ти е, че упражнението е било в рамките на 5 минути и на 12 реда за да се получи работеща функция. След това дойде PEP8 и нещата доста се разтеглиха :D

Сега щом ми отнемаш точка за 12 if, който ги НЯМАМ във финалното решение редно е на всички с решение 12 и повече if да отнемеш точка, иначе го считам за лична нападка затова, че съм си ПОЗВОЛИЛ да имам мнение относно ЕЛЕГАНТНО различно от вашето.

Колкото до това защо съм предал LISP подобно решение? Както писъх във въпроса, за оценяването такъв тип решения само израз винаги са ми били забавни. Не виждам какво ти пречи, че съм се забавлявал с такъв тип решение и как само от 1 видяна функиця от мене реши, че пиша нечетимо всичко останало ...

Самият факт, че си махнал ключовите думи if и else, за сметка на безумното количество скоби не подобрява нещата. Самият факт, че си отворил редактора и си пейстнал едно и също нещо 12 пъти, след което това не ти се е сторило грешно, е достатъчен да ти вземем точка.

Естествено, че има място за субективизъм в нашата наука. Всеки език си има свои разбирания за добри практики. И не стига това, ами голяма част от библиотеките за тези езици си позволяват да ги предефинират. В реда на нещата е ние да добавяме наши правила и е в реда на нещата да ви отнемаме точки, ако вие не ги спазвате.

Бяхме с намерението да не санкционираме никого за първо домашно, защото хората все още не знаят езика. Твоят случай не е такъв. Надяваме се по принцип да не пишеш такъв код и това да е изключение, защото си се забавлявал. Ако това е така, то тази отнета точка не ти е проблем. Забележките ни целят да поощряват писането на по-добър код. Приемайте ги като съвети, а не като опит да ви изкараме некадърни. Когато наши забележки не се вземат под внимание, отнемаме точки. Това е положението.