Решение на Хороскоп от Николай Хубанов

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

Към профила на Николай Хубанов

Резултати

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

Код

# sign information in form
# (sign_name, (start_month, start_day), (end_month, end_day))
SIGN_DESCRIPTION = [
('Овен', (3, 21), (4, 20)),
('Телец', (4, 21), (5, 20)),
('Близнаци', (5, 21), (6, 20)),
('Рак', (6, 21), (7, 21)),
('Лъв', (7, 22), (8, 22)),
('Дева', (8, 23), (9, 22)),
('Везни', (9, 23), (10, 22)),
('Скорпион', (10, 23), (11, 21)),
('Стрелец', (11, 22), (12, 21)),
('Козирог', (12, 22), (1, 19)),
('Водолей', (1, 20), (2, 18)),
('Риби', (2, 19), (3, 20))
]
def what_is_my_sign(day, month):
for sign_name, start_date, end_date in SIGN_DESCRIPTION:
if between_dates((month, day), start_date, end_date):
return sign_name
def between_dates(date, start_date, end_date):
if start_date < end_date:
return start_date <= date and date <= end_date
else:
return start_date <= date or date <= end_date

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

...............
----------------------------------------------------------------------
Ran 15 tests in 0.001s

OK

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

Николай обнови решението на 03.03.2013 01:38 (преди над 11 години)

+def what_is_my_sign(day=1, month=1):
+ # sign information in form
+ # (sign_name, (start_month, start_day), (end_month, end_day))
+ sign_description = [
+ ('Овен', (3, 21), (4, 20)),
+ ('Телец', (4, 21), (5, 20)),
+ ('Близнаци', (5, 21), (6, 20)),
+ ('Рак', (6, 21), (7, 21)),
+ ('Лъв', (7, 22), (8, 22)),
+ ('Дева', (8, 23), (9, 22)),
+ ('Везни', (9, 23), (10, 22)),
+ ('Скорпион', (10, 23), (11, 21)),
+ ('Стрелец', (11, 22), (12, 21)),
+ ('Козирог', (12, 22), (1, 19)),
+ ('Водолей', (1, 20), (2, 18)),
+ ('Риби', (2, 19), (3, 20))
+ ]
+
+ for sign_name, start_date, end_date in sign_description:
+ if between_dates((month, day), start_date, end_date):
+ return sign_name
+
+
+def between_dates(date, start_date, end_date):
+ if start_date < end_date:
+ return start_date <= date and date <= end_date
+ else:
+ return start_date <= date or date <= end_date

Харесва ми че си изнесъл between_dates в отделна функция за да не стане if-a ти четириредов. Ако забравиш обаче за съществуването на месеци и използваш само дни от началото на годината тя няма да ти е нужна ;-)

Можеш да изнесеш константата извън функцията защото не е нужно да се декларира наново при всяко извикване.

PS: Нещо което не сме ви казвали е че за константи практиката е имената на променливите да са с главни букви.

Николай обнови решението на 03.03.2013 22:45 (преди над 11 години)

-def what_is_my_sign(day=1, month=1):
- # sign information in form
- # (sign_name, (start_month, start_day), (end_month, end_day))
- sign_description = [
- ('Овен', (3, 21), (4, 20)),
- ('Телец', (4, 21), (5, 20)),
- ('Близнаци', (5, 21), (6, 20)),
- ('Рак', (6, 21), (7, 21)),
- ('Лъв', (7, 22), (8, 22)),
- ('Дева', (8, 23), (9, 22)),
- ('Везни', (9, 23), (10, 22)),
- ('Скорпион', (10, 23), (11, 21)),
- ('Стрелец', (11, 22), (12, 21)),
- ('Козирог', (12, 22), (1, 19)),
- ('Водолей', (1, 20), (2, 18)),
- ('Риби', (2, 19), (3, 20))
- ]
+# sign information in form
+# (sign_name, (start_month, start_day), (end_month, end_day))
+SIGN_DESCRIPTION = [
+ ('Овен', (3, 21), (4, 20)),
+ ('Телец', (4, 21), (5, 20)),
+ ('Близнаци', (5, 21), (6, 20)),
+ ('Рак', (6, 21), (7, 21)),
+ ('Лъв', (7, 22), (8, 22)),
+ ('Дева', (8, 23), (9, 22)),
+ ('Везни', (9, 23), (10, 22)),
+ ('Скорпион', (10, 23), (11, 21)),
+ ('Стрелец', (11, 22), (12, 21)),
+ ('Козирог', (12, 22), (1, 19)),
+ ('Водолей', (1, 20), (2, 18)),
+ ('Риби', (2, 19), (3, 20))
+]
- for sign_name, start_date, end_date in sign_description:
+
+def what_is_my_sign(day, month):
+ for sign_name, start_date, end_date in SIGN_DESCRIPTION:
if between_dates((month, day), start_date, end_date):
return sign_name
def between_dates(date, start_date, end_date):
if start_date < end_date:
return start_date <= date and date <= end_date
else:
return start_date <= date or date <= end_date