2010-07-18 18 views
10

मैं Django/पायथन में एक डेटिंग साइट का निर्माण कर रहा हूँ। मेरे पास जन्मदिन की तिथियां हैं और यह दिखाने की ज़रूरत है कि व्यक्ति का राशि चक्र उनके जन्मदिन पर आधारित है।मैं पाइथन में जन्मदिन से राशि चक्र/ज्योतिषीय सितारा चिह्न कैसे निर्धारित करूं?

कोई भी इससे पहले किया? इसे पूरा करने का सबसे प्रभावी तरीका क्या होगा?

उत्तर

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)। सरणी के माध्यम से Iterate, और यदि तिथि सरणी में किसी आइटम से कम या बराबर है, तो आपके पास आपका सितारा चिह्न है।

संपादित मैं जरूरत इस इसलिए यहाँ एक काम समारोह

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] 
+2

+1 - यह एक नया मॉड्यूल स्थापित किए बिना किया जा सकता है कि सबसे अच्छा समाधान की तरह दिखता है। –

+0

एक 'सरणी' या 'dict'? – Johnsyweb

+0

मैं इसके लिए एक नियम का उपयोग करता हूं। लुकअप के लिए – Daenyth

8

आप उन्हें position of the planets और सितारों के बारे में कुछ और जानकारी दे सकते हैं।

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

एक आदर्श दुनिया में, आप करने के लिए 'ephem' पुस्तकालय उपयोग करने में सक्षम हो जाएगा अपने उदाहरण में सूर्य के साथ यूरेनस को आसानी से बदलकर राशि चक्र का पता लगाएं। हालांकि, ऐसा प्रतीत होता है कि संकेत और नक्षत्र [बिल्कुल मेल नहीं खाते हैं] (http://en.wikipedia.org/wiki/Zodiac#Table_of_dates)। [ऑरोबोरोस] नामक एक ज्योतिष-विशिष्ट पायथन पुस्तकालय भी है (http://pypi.python.org/pypi/oroboros/20080712), लेकिन यह शायद अधिक है। –

+1

'ऑरोबोरोस' 'एपम' का उपयोग करता है। – fmark

7

का उपयोग द्विविभाजित आप जब तक पुनरावृत्ति कोई मेल मिलता तुलना में अधिक कुशल है के रूप में इस अवधारणा है, लेकिन वर्ष के प्रत्येक दिन के लिए एक लुकअप तालिका है तेज़ी से और वास्तव में इतना बड़ा नहीं है।

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" 
2
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 
0

यहाँ मेरा algo एक पाश (जे एस तर्क: एक js वस्तु का प्रयोग करके) का उपयोग किए बिना

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]; 
संबंधित मुद्दे