Красимир обнови решението на 11.03.2015 11:33 (преди над 9 години)
+def interpret_chinese_sign(year):
+ year_signs = {
+ 1900: "rat",
+ 1901: "ox",
+ 1902: "tiger",
+ 1903: "rabbit",
+ 1904: "dragon",
+ 1905: "snake",
+ 1906: "horse",
+ 1907: "sheep",
+ 1908: "monkey",
+ 1909: "rooster",
+ 1910: "dog",
+ 1911: "pig"
+ }
+
+ while not(year in range(1900, 1912)):
+ if year < 1900:
+ year += 12
+ else:
+ year -= 12
+
+ return year_signs[year]
+
+
+def interpret_western_sign(day, month):
+ months = [
+ ["capricorn"] * 20 + ["aquarius"] * 11, # January
+ ["aquarius"] * 19 + ["pisces"] * 8, # February
+ ["pisces"] * 20 + ["aries"] * 11, # March
+ ["aries"] * 20 + ["taurus"] * 10, # April
+ ["taurus"] * 20 + ["gemini"] * 11, # May
+ ["gemini"] * 20 + ["cancer"] * 9, # June
+ ["cancer"] * 22 + ["leo"] * 9, # July
+ ["leo"] * 22 + ["virgo"] * 9, # August
+ ["virgo"] * 22 + ["libra"] * 8, # September
+ ["libra"] * 22 + ["scorpio"] * 9, # October
+ ["scorpio"] * 21 + ["sagittarius"] * 9, # November
+ ["sagittarius"] * 21 + ["capricorn"] * 9 # December
+ ]
+
+ return months[month - 1][day - 1]
+
+
+def interpret_both_signs(day, month, year):
+ western_sign = interpret_western_sign(day, month)
+ chinese_sign = interpret_chinese_sign(year)
+
+ tup = (western_sign, chinese_sign)
+
+ return tup
С това решение лесно можеш да изпуснеш някой краен случай. Не ти ли се струва излишно да правиш отделен запис за всеки ден от годината?
Струва ми се по - добре от 12 if-a, или искаш да кажеш че има и по елегантно репение?
Малко по-добре е от 12 if
-а, има по-добро решение. В момента големината на списъка ти зависи от броя на дните в година, а не от броя на зодиите (12 елемента е далеч по-добре от 365, ако може да се постигне :))