I am building a dating site in Django / Python. I have birthday dates and need to show what the person's Zodiac sign is based on their birthday.
Anybody done this before? What would be the most efficient way of accomplishing this?
I am building a dating site in Django / Python. I have birthday dates and need to show what the person's Zodiac sign is based on their birthday.
Anybody done this before? What would be the most efficient way of accomplishing this?
You could give them some more information about position of the planets and the stars.
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')
I've done this before. The simplest solution that I ended up with was an array of the following key/values:
120:Sag, 218:Cap, 320:Aqu, 420:Pis, 521:Ari,
621:Tau, 722:Gem, 823:Can, 923:Leo, 1023:Vir
1122:Lib, 1222:Scorp, 1231: Sag
Then you write the birth date in the mdd
format, ie, month number (starting with 1 for January) and two digit day number (01-31). Iterate through the array, and if the date is less than an item in the array, you have your star sign.
Using bisect is more efficient than iterating until you find a match, but a lookup table for each day of the year is faster still and really not that big.
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"