如何在Python中根据生日确定星座/占星术星座?
我正在用Django和Python搭建一个约会网站。我有用户的生日信息,需要根据他们的生日来显示他们的星座。
有没有人做过这个?有什么高效的方法可以实现这个功能吗?
6 个回答
8
你可以给他们提供一些关于行星和星星位置的更多信息。
import ephem
>>> u = ephem.Uranus()
>>> u.compute('1871/3/13')
>>> print u.ra, u.dec, u.mag
7:38:06.27 22:04:47.4 5.46
>>> print ephem.constellation(u)
('Gem', 'Gemini')
8
使用二分查找比一个一个去找匹配的东西要高效得多,但如果为每一天准备一个查找表,那速度会更快,而且其实也没那么大。
from bisect import bisect
signs = [(1,20,"Cap"), (2,18,"Aqu"), (3,20,"Pis"), (4,20,"Ari"),
(5,21,"Tau"), (6,21,"Gem"), (7,22,"Can"), (8,23,"Leo"),
(9,23,"Vir"), (10,23,"Lib"), (11,22,"Sco"), (12,22,"Sag"),
(12,31,"Cap")]
def zodiac_sign(m,d):
return signs[bisect(signs,(m,d))][2]
assert zodiac_sign(3,9) == "Pis"
assert zodiac_sign(6,30) == "Can"
15
我之前做过这个。最后我找到的最简单的解决方案是一个包含以下键值对的数组:
120:Cap, 218:Aqu, 320:Pis, 420:Ari, 521:Tau,
621:Gem, 722:Can, 823:Leo, 923:Vir, 1023:Lib
1122:Sco, 1222:Sag, 1231: Cap
然后你把出生日期写成 mdd
格式,也就是月份数字(从1开始代表一月)和两位数的日期(01-31)。接着遍历这个数组,如果日期小于或等于数组中的某个项目,你就能找到你的星座了。
补充说明 我需要这个,所以这里有一个可以工作的函数的概念
zodiacs = [(120, 'Cap'), (218, 'Aqu'), (320, 'Pis'), (420, 'Ari'), (521, 'Tau'),
(621, 'Gem'), (722, 'Can'), (823, 'Leo'), (923, 'Vir'), (1023, 'Lib'),
(1122, 'Sco'), (1222, 'Sag'), (1231, 'Cap')]
def get_zodiac_of_date(date):
date_number = int("".join((str(date.date().month), '%02d' % date.date().day)))
for z in zodiacs:
if date_number <= z[0]:
return z[1]