Как я определил бы Зодиак / астрологический знак зодиака от дня рождения в Python?

Я создаю сайт знакомств в Django / Python. У меня есть даты дня рождения и потребность показать то, что Знак Зодиака человека основан на их дне рождения.

Кто-либо сделанный это прежде? Каков был бы самый эффективный способ выполнить это?

10
задан rwdsco 18 July 2010 в 06:46
поделиться

3 ответа

Я делал это раньше. Самым простым решением, к которому я пришел, был массив следующих ключей / значений:

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]
15
ответ дан 3 December 2019 в 14:43
поделиться

Вы могли бы дать им дополнительную информацию о положении планет и звезд.

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
ответ дан 3 December 2019 в 14:43
поделиться

Использование пополам более эффективно, чем повторение до тех пор, пока вы не найдете совпадение, но таблица поиска для каждого дня года еще быстрее и действительно не такая большая.

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"
7
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: