我如何从Python生日那天确定生肖/占星星座?

rwd*_*sco 10 python django date-of-birth

我正在Django/Python中建立一个约会网站.我有生日约会,需要根据他们的生日来展示这个人的十二生肖.

以前有人这样做过吗?实现这一目标的最有效方法是什么?

blu*_*oon 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
Run Code Online (Sandbox Code Playgroud)

然后以mdd格式编写出生日期,即月份编号(从1开始为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]
Run Code Online (Sandbox Code Playgroud)

  • +1 - 这看起来是无需安装新模块即可完成的最佳解决方案. (2认同)

Sig*_*gyF 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')
Run Code Online (Sandbox Code Playgroud)

  • 在一个完美的世界中,你可以使用`ephem`库在你的例子中简单地用天堂取代天王星来找出十二生肖.然而,似乎标志和星座[完全不匹配](http://en.wikipedia.org/wiki/Zodiac#Table_of_dates).还有一个名为[oroboros]的占星术特定的Python库(http://pypi.python.org/pypi/oroboros/20080712),但它可能有点过分. (3认同)

Joh*_*ooy 7

在找到匹配项之前,使用bisect比迭代更有效,但是一年中每一天的查找表仍然更快,而且实际上并不那么大.

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"
Run Code Online (Sandbox Code Playgroud)