Решение на Хороскоп от Орлин Христов

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

Към профила на Орлин Христов

Резултати

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

Код

ZODIAC = (
((101, 119), 'Козирог'),
((120, 218), 'Водолей'),
((219, 320), 'Риби'),
((321, 420), 'Овен'),
((421, 520), 'Телец'),
((521, 620), 'Близнаци'),
((621, 721), 'Рак'),
((722, 822), 'Лъв'),
((823, 922), 'Дева'),
((923, 1022), 'Везни'),
((1023, 1121), 'Скорпион'),
((1122, 1221), 'Стрелец'),
((1222, 1231), 'Козирог'),
)
def what_is_my_sign(day=11, month=2):
date = 100 * month + day
return next(sign for dates, sign in ZODIAC if dates[0] <= date <= dates[1])

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

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

OK

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

Орлин обнови решението на 28.02.2013 09:46 (преди над 11 години)

+ZODIAC = {
+ (101, 119): 'Козирог',
+ (120, 218): 'Водолей',
+ (219, 320): 'Риби',
+ (321, 420): 'Овен',
+ (421, 520): 'Телец',
+ (521, 620): 'Близнаци',
+ (621, 721): 'Рак',
+ (722, 822): 'Лъв',
+ (823, 922): 'Дева',
+ (923, 1022): 'Везни',
+ (1023, 1121): 'Скорпион',
+ (1122, 1221): 'Стрелец',
+ (1222, 1231): 'Козирог',
+ }
+
+def what_is_my_sign(day=11, month=2):
+ date = 100 * month + day
+ for date_range, zodiac_sign in ZODIAC.items():
+ if date_range[0] <= date <= date_range[1]:
+ return zodiac_sign

Орлин обнови решението на 28.02.2013 09:58 (преди над 11 години)

-ZODIAC = {
- (101, 119): 'Козирог',
- (120, 218): 'Водолей',
- (219, 320): 'Риби',
- (321, 420): 'Овен',
- (421, 520): 'Телец',
- (521, 620): 'Близнаци',
- (621, 721): 'Рак',
- (722, 822): 'Лъв',
- (823, 922): 'Дева',
- (923, 1022): 'Везни',
- (1023, 1121): 'Скорпион',
- (1122, 1221): 'Стрелец',
- (1222, 1231): 'Козирог',
- }
+ZODIAC = (
+ ((101, 119), 'Козирог'),
+ ((120, 218), 'Водолей'),
+ ((219, 320), 'Риби'),
+ ((321, 420), 'Овен'),
+ ((421, 520), 'Телец'),
+ ((521, 620), 'Близнаци'),
+ ((621, 721), 'Рак'),
+ ((722, 822), 'Лъв'),
+ ((823, 922), 'Дева'),
+ ((923, 1022), 'Везни'),
+ ((1023, 1121), 'Скорпион'),
+ ((1122, 1221), 'Стрелец'),
+ ((1222, 1231), 'Козирог'),
+ )
def what_is_my_sign(day=11, month=2):
date = 100 * month + day
- for date_range, zodiac_sign in ZODIAC.items():
+ for date_range, zodiac_sign in ZODIAC:
if date_range[0] <= date <= date_range[1]:
return zodiac_sign

Орлин обнови решението на 28.02.2013 10:05 (преди над 11 години)

ZODIAC = (
((101, 119), 'Козирог'),
((120, 218), 'Водолей'),
((219, 320), 'Риби'),
((321, 420), 'Овен'),
((421, 520), 'Телец'),
((521, 620), 'Близнаци'),
((621, 721), 'Рак'),
((722, 822), 'Лъв'),
((823, 922), 'Дева'),
((923, 1022), 'Везни'),
((1023, 1121), 'Скорпион'),
((1122, 1221), 'Стрелец'),
((1222, 1231), 'Козирог'),
)
def what_is_my_sign(day=11, month=2):
- date = 100 * month + day
- for date_range, zodiac_sign in ZODIAC:
+ return next(sign for dates, sign in ZODIAC if dates[0] <= date <= dates[1])
- if date_range[0] <= date <= date_range[1]:
- return zodiac_sign

Орлин обнови решението на 28.02.2013 10:09 (преди над 11 години)

ZODIAC = (
((101, 119), 'Козирог'),
((120, 218), 'Водолей'),
((219, 320), 'Риби'),
((321, 420), 'Овен'),
((421, 520), 'Телец'),
((521, 620), 'Близнаци'),
((621, 721), 'Рак'),
((722, 822), 'Лъв'),
((823, 922), 'Дева'),
((923, 1022), 'Везни'),
((1023, 1121), 'Скорпион'),
((1122, 1221), 'Стрелец'),
((1222, 1231), 'Козирог'),
)
def what_is_my_sign(day=11, month=2):
+ date = 100 * month + day
return next(sign for dates, sign in ZODIAC if dates[0] <= date <= dates[1])

Първоначално беше с речник, но не виждам реална полза от него. Все пак просто итерирам по него, а не търся произволни елементи... А като кортеж от двойки по-лесно мога да обърна релацията дата -> зодия в зодия -> дата, ако се наложи ...

А относно формата ми се струва сравнително естествен избор. При положение, че не ми се използва излишно сложен клас за тях. :) Другия вариант беше tuple(month, day), който също осигурява директно сравнение без допълнителна работа, но ми се видя, че много скоби се натрупват

Съгласен съм с Киро, че речника ще изглежда по-щадящо за очите. Може би дори ще бъде по-правилно семантично.

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

Орлин обнови решението на 03.03.2013 18:56 (преди над 11 години)

ZODIAC = (
((101, 119), 'Козирог'),
((120, 218), 'Водолей'),
((219, 320), 'Риби'),
((321, 420), 'Овен'),
((421, 520), 'Телец'),
((521, 620), 'Близнаци'),
((621, 721), 'Рак'),
((722, 822), 'Лъв'),
((823, 922), 'Дева'),
((923, 1022), 'Везни'),
((1023, 1121), 'Скорпион'),
((1122, 1221), 'Стрелец'),
((1222, 1231), 'Козирог'),
)
+
def what_is_my_sign(day=11, month=2):
date = 100 * month + day
return next(sign for dates, sign in ZODIAC if dates[0] <= date <= dates[1])