Решение на Астрологични забави от Ивелина Христова

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

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

Резултати

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

Код

def interpret_western_sign(day, month):
sign_name = ""
signs = {'capricorn': (1, 21), 'aquarius': (2, 19), 'pisces': (3, 21), 'aries': (4, 21),
'taurus': (5, 21), 'gemini': (6, 21), 'cancer': (7, 23), 'leo': (8, 23), 'virgo': (9, 23),
'libra': (10, 23), 'scorpio': (11, 22), 'sagittarius': (12, 22)}
for sign, values in signs.items():
if values[0] == month:
if values[1] <= day:
new_month = values[0]
if values[0] == 12:
new_month = 1
else:
new_month += 1
sign_name = interpret_western_sign(1, new_month)
else:
sign_name = sign
return sign_name
def interpret_chinese_sign(year):
sign_name = ""
signs = {'rat': 1900, 'ox': 1901, 'tiger': 1902, 'rabbit': 1903,
'dragon': 1904, 'snake': 1905, 'horse': 1906, 'sheep': 1907, 'monkey': 1908,
'rooster': 1909, 'dog': 1910, 'pig': 1911}
if year > 1911:
while year > 1911:
year -= 12
elif year < 1900:
while year < 1900:
year += 12
for sign, value in signs.items():
if value == year:
sign_name = sign
return sign_name
def interpret_both_signs(day, month, year):
return (interpret_western_sign(day, month), interpret_chinese_sign(year))

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

......
----------------------------------------------------------------------
Ran 6 tests in 0.006s

OK

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

Ивелина обнови решението на 10.03.2015 00:53 (преди над 9 години)

+def interpret_western_sign(day, month):
+ sign_name = ""
+ signs = {'capricorn': (1, 21), 'aquarius': (2, 19), 'pisces': (3, 21), 'aries': (4, 21),
+ 'taurus': (5, 21), 'gemini': (6, 21), 'cancer': (7, 23), 'leo': (8, 23), 'virgo': (9, 23),
+ 'libra': (10, 23), 'scorpio': (11, 22), 'sagittarius': (12, 22)}
+ for sign, values in signs.items():
+ if values[0] == month:
+ if values[1] <= day:
+ new_month = values[0]
+ if values[0] == 12:
+ new_month = 1
+ else:
+ new_month += 1
+ sign_name = interpret_western_sign(1, new_month)
+ else:
+ sign_name = sign
+ return sign_name
+
+def interpret_chinese_sign(year):
+ sign_name = ""
+ signs = {'rat': 1900, 'ox': 1901, 'tiger': 1902, 'rabbit': 1903,
+ 'dragon': 1904, 'snake': 1905, 'horse': 1906, 'sheep': 1907, 'monkey': 1908,
+ 'rooster': 1909, 'dog': 1910, 'pig': 1911}
+ if year > 1911:
+ while year > 1911:
+ year -= 12
+ elif year < 1900:
+ while year < 1900:
+ year += 12
+ for sign, value in signs.items():
+ if value == year:
+ sign_name = sign
+ return sign_name
+
+def interpret_both_signs(day, month, year):
+ return (interpret_western_sign(day, month), interpret_chinese_sign(year))

Лично аз бих се замислил за по-прост подход към проблема. Тези for-ове с if-ове с рекурсивни викания са доста доста трудни за проследяване. Изглежда да работи, но ако възникне проблем, ще бъде отстранен с многот пот и мисловна дейност. Но все пак, предала си работещо решение.