- 締切済み
pythonのプログラミングについて教えてください
pythonのdatetimeモジュールを使って自分の誕生日を入れたら星座と干支が出てくるプログラムの作り方を教えてください できるだけ詳しくお願いします
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- cametan_42
- ベストアンサー率62% (163/262)
- kmee
- ベストアンサー率55% (1857/3366)
別に日時計算するわけでは無いので、datetimeモジュールを使う意味は無いように思うのですが。 干支: 正式には十干と十二支合せた60通りのことを言うそうで。 60通りなので、「年」を60で割った余り(0~59)を対応する干支と結び付ければいい。 整数と文字列を関連付けるなら、リストやタプルが好都合。 60も用意するのが面倒なら、10で割った余りから十干、12で割った余りから十二支を求める。 星座: これも、いろんな流派があるようですが、12宮だとすると。 基本は「月」と星座が結びついています。上でやったようなリストやタプルで変換表を作ればよいでしょう。 ただ、「日」によっては「次の月の星座」扱いになるので、「次の月扱いになる日付」のテーブルも用意して、その日より前か後かによって条件分岐するようにします。 プログラムの作りかた: それぞれのやりかたが決まったのですから、それを「Python」という言葉に翻訳するだけです。
- cametan_42
- ベストアンサー率62% (163/262)
#!/usr/bin/env python # -*- coding: utf-8 -*- ### No.1 はちょっとアルゴリズム書き間違えてたトコがあるんで、修正版です。 ### http://www.python.jp/doc/2.5/lib/node85.html を参照 from datetime import date from time import strptime class seizaAndEto: def __init__(self): ### http://ja.wikipedia.org/wiki/%E5%B9%B2%E6%94%AF#.E5.B9.B4.E3.81.AE.E5.B9.B2.E6.94.AF を参照 self.jikkan = { 0 : '庚', 1 : '辛', 2 : u'壬', 3 : '癸', 4 : '甲', \ 5 : '乙', 6 : '丙', 7 : '丁', 8 : '戊', 9 : '己' } self.junishi = { 0 : '申', 1 : '酉', 2 : '戌', 3 : '亥', \ 4 : '子', 5 : '丑', 6 : '寅', 7 : '卯', \ 8 : '辰', 9 : '巳', 10 : '午', 11 : '未' } ### http://www.ipc.hokusei.ac.jp/~z00104/delphi/srclister2.pl?uranai.pas:41:95:blue を参照 self.seiza = { 1 : '山羊座', 2 : '水瓶座', 3 : 'うお座', 4 : '牡羊座', \ 5 : '牡牛座', 6 : '双子座', 7 : 'かに座', 8 : '獅子座', \ 9 : '乙女座', 10 : '天秤座', 11 : 'さそり座', 12 : '射手座' } self.printSeizaAndEto() def printSeizaAndEto(self): print '生年月日を入力します。' year = raw_input('生まれた年を入力してください : ') month = raw_input('生まれた月を入力してください : ') day = raw_input('生まれた日を入力してください : ') s = "%s-%s-%s" % (year, month, day) dobj= date(*strptime(s, "%Y-%m-%d")[0:3]) self.year, self.month, self.day = dobj.year, dobj.month, dobj.day print "生年月日: %s" % dobj print '星座: %s' % (self.seizaHantei()) print '干支: %s' % (self.etoHantei()) def seizaHantei(self): if self.day > 22: if self.month == 12: return self.seiza[1] else: return self.seiza[self.month + 1] else : return self.seiza[self.month] def etoHantei(self): return self.jikkan[self.year % 10] + self.junishi[self.year % 12] if __name__ == '__main__': v = seizaAndEto()
- cametan_42
- ベストアンサー率62% (163/262)
#!/usr/bin/env python # -*- coding: utf-8 -*- ### http://www.python.jp/doc/2.5/lib/node85.html を参照 ### しかし本当はdatetimeモジュールを使う意味が分からない ### (なくても構わないような気がする) from datetime import date from time import strptime ### http://ja.wikipedia.org/wiki/%E5%B9%B2%E6%94%AF#.E5.B9.B4.E3.81.AE.E5.B9.B2.E6.94.AF を参照 jikkan = { 0 : '庚', 1 : '辛', 2 : u'壬', 3 : '癸', 4 : '甲', \ 5 : '乙', 6 : '丙', 7 : '丁', 8 : '戊', 9 : '己' } junishi = { 0 : '申', 1 : '酉', 2 : '戌', 3 : '亥', 4 : '子', 5 : '丑', \ 6 : '寅', 7 : '卯', 8 : '辰', 9 : '巳', 10 : '午', 11 : '未' } ### http://www.ipc.hokusei.ac.jp/~z00104/delphi/srclister2.pl?uranai.pas:41:95:blue を参照 seiza = { 1 : '山羊座', 2 : '水瓶座', 3 : 'うお座', 4 : '牡羊座', 5 : '牡牛座', 6 : '双子座', \ 7 : 'かに座', 8 : '獅子座', 9 : '乙女座', 10 : '天秤座', 11 : 'さそり座', 12 : '射手座' } class seizaAndEto: def __init__(self): print '生年月日を入力します。' self.year = input('生まれた年を入力してください : ') self.month = input('生まれた月を入力してください : ') self.day = input('生まれた日を入力してください : ') s = "%d-%d-%d" % (self.year, self.month, self.day) date_obj= date(*strptime(s, "%Y-%m-%d")[0:3]) print "生年月日: %s" % date_obj print '星座: %s' % (self.seizaHantei()) print '干支: %s' % (self.etoHantei()) def seizaHantei(self): if self.day > 22 and self.day < 32: if self.month == 12: return seiza[self.month + 1] elif self.month > 12 or self.month < 1: raise ValueError else: return seiza[self.month] elif self.day > 0 and self.day < 23: return seiza[self.month] else: raise ValueError def etoHantei(self): return jikkan[self.year % 10] + junishi[self.year % 12] if __name__ == '__main__': v = seizaAndEto()