Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我将如何从Python中的生日确定黄道带/占星术星座?_Python_Django_Date Of Birth - Fatal编程技术网

我将如何从Python中的生日确定黄道带/占星术星座?

我将如何从Python中的生日确定黄道带/占星术星座?,python,django,date-of-birth,Python,Django,Date Of Birth,我正在用Django/Python建立一个约会网站。我有生日日期,需要根据他们的生日显示他们的星座 以前有人这样做过吗?实现这一点最有效的方法是什么?你可以给他们提供更多关于太阳和星星的信息 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 >>

我正在用Django/Python建立一个约会网站。我有生日日期,需要根据他们的生日显示他们的星座


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

你可以给他们提供更多关于太阳和星星的信息

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')

我以前做过这个。我最终得到的最简单的解决方案是由以下键/值组成的数组:

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月份的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]
zodiacs=[(120,'Cap'),(218,'aq'),(320,'Pis'),(420,'Ari'),(521,'Tau'),
(621,‘Gem’,(722,‘Can’,(823,‘Leo’,(923,‘Vir’,(1023,‘Lib’),
(1122,‘上合’、(1222,‘下陷’)、(1231,‘下陷’)]
def获取黄道带日期(日期):
date_number=int(“.”join((str(date.date().month),“%02d”%date.date().day)))
对于十二生肖中的z:

如果date_number使用对分比迭代直到找到匹配项更有效,但是一年中每一天的查找表速度更快,而且实际上没有那么大

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"
var ZZ=[1231122211122102392323722621521420321220121];
var ZN=[‘摩羯座’、‘射手座’、‘天蝎座’、‘天秤座’、‘处女座’、‘狮子座’、‘巨蟹座’、‘双子座’、‘金牛座’、‘白羊座’、‘双鱼座’、‘水瓶座’、‘摩羯座’];
var d8=新日期();
var m=d8.getMonth()+1;
var d=d8.getDate();
//m=1;d=1

var mdd=parseInt(“”+m+(d这里是我不使用循环的算法(JS逻辑:使用JS对象)

def十二生肖(日、月):
星座=[(‘摩羯座’,19),(‘水瓶座’,18),(‘双鱼座’,20),(‘白羊座’,19),(‘金牛座’,20),(‘双子座’,20),(‘巨蟹座’,22),(‘狮子座’,22),(‘处女座’,22),(‘天秤座’,22),(‘天蝎座’,21),(‘射手座’,21),(‘摩羯座,)]

如果(第+1天)-这看起来是无需安装新模块即可完成的最佳解决方案。对于查找,您可以使用
对分
,请参阅中的示例。在不经常使用的函数中对13个键使用对分有点过度优化,您不认为吗?此外,日志2(13)是3.7,所以你只有13/3.7=3.5倍的运算量。我担心对分中的一个运算可能比简单循环要花费3.5倍多的时间,所以你的性能甚至更差。总之,对分对于大多数搜索案例来说是非常好的建议,但这可能不是一个。我也会使用dict,但像这样:
d[bisect(d.keys(),121)]
,导致“下垂”。速度不是那么快,我认为它只是看起来比写一个循环更好。而不是
date\u number=int(“”。join((str(date.date().month),“%02d”%date.date().day))
你可以有
date\u number=date.date().month*100+date.date().day
在一个完美的世界中,您可以使用
以弗所
库,通过简单地将天王星替换为太阳来查找黄道十二宫。然而,在您的示例中,这些星座和星座似乎都不相同。还有一个特定于占星术的Python库,名为。
var ZZ=[1231,1222,1122,1023,923,823,722,621,521,420,321,220,121];

var ZN=['Capricorn','Sagittarius','Scorpio','Libra','Virgo','Leo','Cancer', 'Gemini','Taurus','Aries','Pisces','Aquarius','Capricorn'];

var d8=new Date();

var m=d8.getMonth()+1;

var d=d8.getDate();

//m=1;d=1

var mdd=parseInt(''+m+(d<9?'0'+d:d));

var i=0;while(ZZ[i]&gt;mdd && i&lt;ZZ.length){i++}--i;

var RV='Born '+m+'/'+d+' - Star Sign: '+ZN[i];RV
var zods = {
            0:{limit:21,vals:["aqu","cap"]},
            1:{limit:20,vals:["pis","aqu"]},
            2:{limit:21,vals:["ari","pis"]},
            3:{limit:21,vals:["tau","ari"]},
            4:{limit:21,vals:["gem","tau"]},
            5:{limit:21,vals:["can","gem"]},
            6:{limit:22,vals:["leo","can"]},
            7:{limit:22,vals:["vir","leo"]},
            8:{limit:22,vals:["lib","vir"]},
            9:{limit:22,vals:["sco","lib"]},
            10:{limit:23,vals:["sag","sco"]},
            11:{limit:22,vals:["cap","sag"]}
            };

        var dt = new Date();
        var zodObj = zods[dt.getMonth()];
        return dt.getDate()>=zodObj.limit?zodObj.vals[0]:zodObj.vals[1];
def zodiac(day,month):
    signs=[('Capricorn',19),('Aquarius',18),('Pisces',20),('Aries',19),('Taurus',20),('Gemini',20) ,('Cancer',22),('Leo',22) ,('Virgo',22) ,('Libra',22) ,('Scorpio',21),('Sagittarius',21),('Capricorn',)]
    if(day<=signs[month-1][1]):
        return signs[month-1][0]
    else:
        return signs[month][0]