Решение на Астрологични забави от Красимир Николов

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

Към профила на Красимир Николов

Резултати

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

Код

def interpret_western_sign(day, month):
zodiacs = [
(120, 'capricorn'), (218, 'aquarius'), (320, 'pisces'),
(420, 'aries'), (520, 'taurus'), (620, 'gemini'),
(722, 'cancer'), (822, 'leo'), (922, 'virgo'),
(1022, 'libra'), (1121, 'scorpio'), (1221, 'sagittarius'),
(1231, 'capricorn')
]
date_num = 100*month + day
for z in zodiacs:
if date_num <= z[0]:
return z[1]
def interpret_chinese_sign(year):
chinese_zodiacs = {
0: 'monkey',
1: 'rooster',
2: 'dog',
3: 'pig',
4: 'rat',
5: 'ox',
6: 'tiger',
7: 'rabbit',
8: 'dragon',
9: 'snake',
10: 'horse',
11: 'sheep'
}
return chinese_zodiacs[year % 12]
def interpret_both_signs(day, month, year):
return interpret_western_sign(day, month), interpret_chinese_sign(year)

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

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

OK

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

Красимир обнови решението на 08.03.2015 13:46 (преди над 9 години)

+def interpret_western_sign(day, month):
+ zodiacs = [
+ (120, 'capricorn'), (218, 'aquarius'), (320, 'pisces'),
+ (420, 'aries'), (520, 'taurus'), (620, 'gemini'),
+ (722, 'cancer'), (822, 'leo'), (922, 'virgo'),
+ (1022, 'libra'), (1121, 'scorpio'), (1221, 'sagittarius'),
+ (1231, 'capricorn')
+ ]
+
+ date_num = 100*month + day
+ for z in zodiacs:
+ if date_num <= z[0]:
+ return z[1]
+
+
+def interpret_chinese_sign(year):
+ chinese_zodiacs = [
+ (0, 'monkey'), (1, 'rooster'), (2, 'dog'),
+ (3, 'pig'), (4, 'rat'), (5, 'ox'),
+ (6, 'tiger'), (7, 'rabbit'), (8, 'dragon'),
+ (9, 'snake'), (10, 'horse'), (11, 'sheep')
+ ]
+ return chinese_zodiacs[year % 12][1]
+
+
+def interpret_both_signs(day, month, year):
+ return interpret_western_sign(day, month), interpret_chinese_sign(year)

Красимир обнови решението на 09.03.2015 12:30 (преди над 9 години)

def interpret_western_sign(day, month):
zodiacs = [
(120, 'capricorn'), (218, 'aquarius'), (320, 'pisces'),
(420, 'aries'), (520, 'taurus'), (620, 'gemini'),
(722, 'cancer'), (822, 'leo'), (922, 'virgo'),
(1022, 'libra'), (1121, 'scorpio'), (1221, 'sagittarius'),
(1231, 'capricorn')
]
date_num = 100*month + day
for z in zodiacs:
if date_num <= z[0]:
return z[1]
def interpret_chinese_sign(year):
- chinese_zodiacs = [
- (0, 'monkey'), (1, 'rooster'), (2, 'dog'),
- (3, 'pig'), (4, 'rat'), (5, 'ox'),
- (6, 'tiger'), (7, 'rabbit'), (8, 'dragon'),
- (9, 'snake'), (10, 'horse'), (11, 'sheep')
- ]
- return chinese_zodiacs[year % 12][1]
+ chinese_zodiacs = {
+ 0: 'monkey',
+ 1: 'rooster',
+ 2: 'dog',
+ 3: 'pig',
+ 4: 'rat',
+ 5: 'ox',
+ 6: 'tiger',
+ 7: 'rabbit',
+ 8: 'dragon',
+ 9: 'snake',
+ 10: 'horse',
+ 11: 'sheep'
+ }
+ return chinese_zodiacs[year % 12]
def interpret_both_signs(day, month, year):
return interpret_western_sign(day, month), interpret_chinese_sign(year)

Здравейте. Да с dict изглежда по-добре, за първата функция обаче, честно казано не мога да се сетя как може да стане по оптимизирано, поне за това решение, защото, ако го сложа и там на dict, то тогава трябва да сортирам този dict и при сортиране, реално отново ще получа tuple, и пак се връщам в началното решение. А според мен да се прави sort ще е малко безмислено, защото отново се получава tuple. Възмжно е и да има и по хитър начин и да се получи с dict, но за момента просто нямам идея как може да стане :) .