Решение на Хороскоп от Георги Горанов

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

Към профила на Георги Горанов

Резултати

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

Код

months = {1: ('Козирог', 19, 'Водолей'),
2: ('Водолей', 18, 'Риби'),
3: ('Риби', 20, 'Овен'),
4: ('Овен', 20, 'Телец'),
5: ('Телец', 20, 'Близнаци'),
6: ('Близнаци', 20, 'Рак'),
7: ('Рак', 21, 'Лъв'),
8: ('Лъв', 22, 'Дева'),
9: ('Дева', 22, 'Везни'),
10: ('Везни', 22, 'Скорпион'),
11: ('Скорпион', 21, 'Стрелец'),
12: ('Стрелец', 21, 'Козирог')}
def what_is_my_sign(day, month):
if day > months[month][1]:
return (months[month][2])
elif day <= months[month][1]:
return (months[month][0])

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

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

OK

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

Георги обнови решението на 28.02.2013 22:19 (преди около 11 години)

+# Function returning the astro sign according to given birth day and month
+
+
+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):
+ print('Овен')
+ elif (day in range(22, 31) and month == 4) or (day in range(1, 21) and month == 5):
+ print('Телец')
+ elif (day in range(21, 32) and month == 5) or (day in range(1, 21) and month == 6):
+ print('Близнаци')
+ elif (day in range(21, 31) and month == 6) or (day in range(1, 22) and month == 7):
+ print('Рак')
+ elif (day in range(22, 32) and month == 7) or (day in range(1, 23) and month == 8):
+ print('Лъв')
+ elif (day in range(23, 32) and month == 8) or (day in range(1, 23) and month == 9):
+ print('Дева')
+ elif (day in range(23, 31) and month == 9) or (day in range(1, 23) and month == 10):
+ print('Везни')
+ elif (day in range(23, 32) and month == 10) or (day in range(1, 22) and month == 11):
+ print('Скорпион')
+ elif (day in range(22, 31) and month == 11) or (day in range(1, 22) and month == 12):
+ print('Стрелец')
+ elif (day in range(22, 32) and month == 12) or (day in range(1, 20) and month == 1):
+ print('Козирог')
+ elif (day in range(20, 32) and month == 1) or (day in range(1, 19) and month == 2):
+ print('Водолей')
+ elif (day in range(19, 30) and month == 2) or (day in range(1, 21) and month == 3):
+ print('Риби')
+ else:
+ print('Your input is invalid')

Георги обнови решението на 01.03.2013 00:21 (преди около 11 години)

-# Function returning the astro sign according to given birth day and month
+# Month tuples assigned with the two astro sign and their border
+january = ('Козирог', 19, 'Водолей')
+february = ('Водолей', 18, 'Риби')
+march = ('Риби', 20, 'Овен')
+april = ('Овен', 20, 'Телец')
+may = ('Телец', 20, 'Близнаци')
+june = ('Близнаци', 20, 'Рак')
+july = ('Рак', 21, 'Лъв')
+august = ('Лъв', 22, 'Дева')
+september = ('Дева', 22, 'Везни')
+october = ('Везни', 22, 'Скорпион')
+november = ('Скорпион', 21, 'Стрелец')
+december = ('Стрелец', 21, 'Козирог')
+# Months dict with month number as key and the tuple month for value
+months = {1: january, 2: february, 3: march, 4: april, 5: may, 6: june, 7:
+ july, 8: august, 9: september,
+ 10: october, 11: november, 12: december}
+
+# Function which derives the astro sign according to the birth date
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):
- print('Овен')
+ if day > months.get(month)[1]:
- elif (day in range(22, 31) and month == 4) or (day in range(1, 21) and month == 5):
+ print (months.get(month)[2])
- print('Телец')
+ elif day <= months.get(month)[1]:
- elif (day in range(21, 32) and month == 5) or (day in range(1, 21) and month == 6):
+ print (months.get(month)[0])
- print('Близнаци')
- elif (day in range(21, 31) and month == 6) or (day in range(1, 22) and month == 7):
- print('Рак')
- elif (day in range(22, 32) and month == 7) or (day in range(1, 23) and month == 8):
- print('Лъв')
- elif (day in range(23, 32) and month == 8) or (day in range(1, 23) and month == 9):
- print('Дева')
- elif (day in range(23, 31) and month == 9) or (day in range(1, 23) and month == 10):
- print('Везни')
- elif (day in range(23, 32) and month == 10) or (day in range(1, 22) and month == 11):
- print('Скорпион')
- elif (day in range(22, 31) and month == 11) or (day in range(1, 22) and month == 12):
- print('Стрелец')
- elif (day in range(22, 32) and month == 12) or (day in range(1, 20) and month == 1):
- print('Козирог')
- elif (day in range(20, 32) and month == 1) or (day in range(1, 19) and month == 2):
- print('Водолей')
- elif (day in range(19, 30) and month == 2) or (day in range(1, 21) and month == 3):
- print('Риби')
- else:
- print('Your input is invalid')

Не. Ако някой ти даде невалиден input, да се оправя. Не е твой проблем.

  • Коментарите из кода обаче не ми харесват. Излишни са.
  • Защо имаш нужда от изрично дефиниране на месеците, като не ги ползваш извън dict-а?
  • Не вземай неща от речник с .get(), освен ако нямаш добра причина. В случая нямаш, тъй като разчиташ на валиден input.

Не разбирам причината само за един коментар - изричното дефиниране на месеците. Това го правя за прегледност, в противен случай ако директно слагам тюпълите в речника дефиницията му ще е на 20 реда.

Георги обнови решението на 01.03.2013 14:16 (преди около 11 години)

-# Month tuples assigned with the two astro sign and their border
-january = ('Козирог', 19, 'Водолей')
-february = ('Водолей', 18, 'Риби')
-march = ('Риби', 20, 'Овен')
-april = ('Овен', 20, 'Телец')
-may = ('Телец', 20, 'Близнаци')
-june = ('Близнаци', 20, 'Рак')
-july = ('Рак', 21, 'Лъв')
-august = ('Лъв', 22, 'Дева')
-september = ('Дева', 22, 'Везни')
-october = ('Везни', 22, 'Скорпион')
-november = ('Скорпион', 21, 'Стрелец')
-december = ('Стрелец', 21, 'Козирог')
+months = {1: ('Козирог', 19, 'Водолей'),
+ 2: ('Водолей', 18, 'Риби'),
+ 3: ('Риби', 20, 'Овен'),
+ 4: ('Овен', 20, 'Телец'),
+ 5: ('Телец', 20, 'Близнаци'),
+ 6: ('Близнаци', 20, 'Рак'),
+ 7: ('Рак', 21, 'Лъв'),
+ 8: ('Лъв', 22, 'Дева'),
+ 9: ('Дева', 22, 'Везни'),
+ 10: ('Везни', 22, 'Скорпион'),
+ 11: ('Скорпион', 21, 'Стрелец'),
+ 12: ('Стрелец', 21, 'Козирог')}
-# Months dict with month number as key and the tuple month for value
-months = {1: january, 2: february, 3: march, 4: april, 5: may, 6: june, 7:
- july, 8: august, 9: september,
- 10: october, 11: november, 12: december}
-
-# Function which derives the astro sign according to the birth date
def what_is_my_sign(day, month):
- if day > months.get(month)[1]:
- print (months.get(month)[2])
+ if day > months[month][1]:
- elif day <= months.get(month)[1]:
+ return (months[month][2])
- print (months.get(month)[0])
+ elif day <= months[month][1]:
+ return (months[month][0])