Решение на Астрологични забави от Десислава Говедарска

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

Към профила на Десислава Говедарска

Резултати

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

Код

from bisect import bisect
def interpret_western_sign(day, month):
signs = (
'capricorn', 'aquarius', 'pisces',
'aries', 'taurus', 'gemini',
'cancer', 'leo', 'virgo',
'libra', 'scorpio', 'sagittarius', 'capricorn'
)
sign_limits = (
121, 219, 321,
421, 521, 621,
723, 823, 923,
1023, 1122, 1222, 1232
)
date = month*100 + day
return signs[bisect(sign_limits, date)]
def interpret_chinese_sign(year):
chinese_signs = (
'monkey', 'rooster', 'dog', 'pig',
'rat', 'ox', 'tiger', 'rabbit',
'dragon', 'snake', 'horse', 'sheep'
)
return chinese_signs[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 версии и 3 коментара)

Десислава обнови решението на 11.03.2015 02:21 (преди над 9 години)

+from bisect import bisect
+
+
+def interpret_western_sign(day, month):
+ signs = (
+ 'capricorn', 'aquarius', 'pisces',
+ 'aries', 'taurus', 'gemini',
+ 'cancer', 'leo', 'virgo',
+ 'libra', 'scorpio', 'sagittarius', 'capricorn'
+ )
+ sign_limits = (
+ 121, 219, 321,
+ 421, 521, 621,
+ 723, 823, 923,
+ 1023, 1122, 1222, 1232
+ )
+ date = int(str(month) + '{:02d}'.format(day))
+ sign_index = bisect(sign_limits, date)
+ return signs[sign_index]
+
+
+def interpret_chinese_sign(year):
+ chinese_signs = (
+ 'monkey', 'rooster', 'dog', 'pig',
+ 'rat', 'ox', 'tiger', 'rabbit',
+ 'dragon', 'snake', 'horse', 'sheep'
+ )
+ sign_index = year % 12
+ return chinese_signs[sign_index]
+
+
+def interpret_both_signs(day, month, year):
+ return (interpret_western_sign(day, month), interpret_chinese_sign(year))
  • date може да го намериш много по-лесно без изобщо да минаваш през стрингове, а само с аритметични операции
  • променливата sign_index е излишна, използваш я само на едно място, а и не си прескочила 79 символа :)

Десислава обнови решението на 11.03.2015 13:19 (преди над 9 години)

from bisect import bisect
def interpret_western_sign(day, month):
signs = (
'capricorn', 'aquarius', 'pisces',
'aries', 'taurus', 'gemini',
'cancer', 'leo', 'virgo',
'libra', 'scorpio', 'sagittarius', 'capricorn'
)
sign_limits = (
121, 219, 321,
421, 521, 621,
723, 823, 923,
1023, 1122, 1222, 1232
)
- date = int(str(month) + '{:02d}'.format(day))
- sign_index = bisect(sign_limits, date)
- return signs[sign_index]
+ date = month*100 + day
+ return signs[bisect(sign_limits, date)]
def interpret_chinese_sign(year):
chinese_signs = (
'monkey', 'rooster', 'dog', 'pig',
'rat', 'ox', 'tiger', 'rabbit',
'dragon', 'snake', 'horse', 'sheep'
)
- sign_index = year % 12
- return chinese_signs[sign_index]
+ return chinese_signs[year % 12]
def interpret_both_signs(day, month, year):
- return (interpret_western_sign(day, month), interpret_chinese_sign(year))
+ return (interpret_western_sign(day, month), interpret_chinese_sign(year))