プロが教える店舗&オフィスのセキュリティ対策術

pythonのdatetimeモジュールを使って自分の誕生日を入れたら星座と干支が出てくるプログラムの作り方を教えてください

できるだけ詳しくお願いします

A 回答 (4件)

#!/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# … を参照
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/srcl … を参照
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()
    • good
    • 0

#!/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# … を参照
    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/srcl … を参照
    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()
    • good
    • 0

別に日時計算するわけでは無いので、datetimeモジュールを使う意味は無いように思うのですが。



干支:
正式には十干と十二支合せた60通りのことを言うそうで。
60通りなので、「年」を60で割った余り(0~59)を対応する干支と結び付ければいい。
整数と文字列を関連付けるなら、リストやタプルが好都合。

60も用意するのが面倒なら、10で割った余りから十干、12で割った余りから十二支を求める。

星座:
これも、いろんな流派があるようですが、12宮だとすると。
基本は「月」と星座が結びついています。上でやったようなリストやタプルで変換表を作ればよいでしょう。
ただ、「日」によっては「次の月の星座」扱いになるので、「次の月扱いになる日付」のテーブルも用意して、その日より前か後かによって条件分岐するようにします。

プログラムの作りかた:
それぞれのやりかたが決まったのですから、それを「Python」という言葉に翻訳するだけです。
    • good
    • 0

ちょっと洒落で作ってみたGUI版。



参考URL:https://raw.github.com/gist/54745e0a077b63fb4c0e …
「pythonのプログラミングについて教え」の回答画像4
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!