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

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

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

Резултати

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

Код

def what_is_my_sign(day, month):
horoscope_map = {
(21, 3, 20, 4): "Овен",
(21, 4, 20, 5): "Телец",
(21, 5, 20, 6): "Близнаци",
(21, 6, 21, 7): "Рак",
(22, 7, 22, 8): "Лъв",
(23, 8, 22, 9): "Дева",
(23, 9, 22, 10): "Везни",
(23, 10, 21, 11): "Скорпион",
(22, 11, 21, 12): "Стрелец",
(22, 12, 19, 1): "Козирог",
(20, 1, 18, 2): "Водолей",
(19, 2, 20, 3): "Риби"
}
for period, name in horoscope_map.items():
is_in_start_period = month == period[1] and day >= period[0]
is_in_end_period = month == period[3] and day <= period[2]
if is_in_start_period or is_in_end_period:
return name

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

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

OK

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

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

+# Gets a map with <key,value> pairs that define horoscope
+# and which pairs have the following meaning:
+# ->key: period for the sign (start_date, start_month, end_date, end_month)
+# ->value: the name of the sign
+
+
+def get_periods_map():
+ horoscope_map = {}
+ horoscope_map[(21, 3, 20, 4)] = "Овен"
+ horoscope_map[(21, 4, 20, 5)] = "Телец"
+ horoscope_map[(21, 5, 20, 6)] = "Близнаци"
+ horoscope_map[(21, 6, 21, 7)] = "Рак"
+ horoscope_map[(22, 7, 22, 8)] = "Лъв"
+ horoscope_map[(23, 8, 22, 9)] = "Дева"
+ horoscope_map[(23, 9, 22, 10)] = "Везни"
+ horoscope_map[(23, 10, 21, 11)] = "Скорпион"
+ horoscope_map[(22, 11, 21, 12)] = "Стрелец"
+ horoscope_map[(22, 12, 19, 1)] = "Козирог"
+ horoscope_map[(20, 1, 18, 2)] = "Водолей"
+ horoscope_map[(19, 2, 20, 3)] = "Риби"
+
+ return horoscope_map
+
+
+def what_is_my_sign(day, month):
+ periods = get_periods_map()
+
+ for period, name in periods.items():
+ is_in_start_period = (month == period[1]) and (day >= period[0])
+ is_in_end_period = (month == period[3]) and (day <= period[2])
+ if is_in_start_period or is_in_end_period:
+ return name

Наличието на horoscope_map в началото на 13 поредни реда не те ли наведе на мисълта, че вършиш нещо грешно? Освен това не е нужно името на всеки речник да свършва с _dict или _map.

И защо е нужно да е във функция?

Скобите в is_in_end_period и is_in_start_period са излишни.

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

-# Gets a map with <key,value> pairs that define horoscope
-# and which pairs have the following meaning:
-# ->key: period for the sign (start_date, start_month, end_date, end_month)
-# ->value: the name of the sign
-
-
-def get_periods_map():
- horoscope_map = {}
- horoscope_map[(21, 3, 20, 4)] = "Овен"
- horoscope_map[(21, 4, 20, 5)] = "Телец"
- horoscope_map[(21, 5, 20, 6)] = "Близнаци"
- horoscope_map[(21, 6, 21, 7)] = "Рак"
- horoscope_map[(22, 7, 22, 8)] = "Лъв"
- horoscope_map[(23, 8, 22, 9)] = "Дева"
- horoscope_map[(23, 9, 22, 10)] = "Везни"
- horoscope_map[(23, 10, 21, 11)] = "Скорпион"
- horoscope_map[(22, 11, 21, 12)] = "Стрелец"
- horoscope_map[(22, 12, 19, 1)] = "Козирог"
- horoscope_map[(20, 1, 18, 2)] = "Водолей"
- horoscope_map[(19, 2, 20, 3)] = "Риби"
-
- return horoscope_map
-
-
def what_is_my_sign(day, month):
- periods = get_periods_map()
+ horoscope_map = {
+ (21, 3, 20, 4): "Овен",
+ (21, 4, 20, 5): "Телец",
+ (21, 5, 20, 6): "Близнаци",
+ (21, 6, 21, 7): "Рак",
+ (22, 7, 22, 8): "Лъв",
+ (23, 8, 22, 9): "Дева",
+ (23, 9, 22, 10): "Везни",
+ (23, 10, 21, 11): "Скорпион",
+ (22, 11, 21, 12): "Стрелец",
+ (22, 12, 19, 1): "Козирог",
+ (20, 1, 18, 2): "Водолей",
+ (19, 2, 20, 3): "Риби"
+ }
- for period, name in periods.items():
- is_in_start_period = (month == period[1]) and (day >= period[0])
- is_in_end_period = (month == period[3]) and (day <= period[2])
+ for period, name in horoscope_map.items():
+ is_in_start_period = month == period[1] and day >= period[0]
+ is_in_end_period = month == period[3] and day <= period[2]
if is_in_start_period or is_in_end_period:
return name

Здравейте!

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

Поздрави,

Александър Пенев