こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

pythonのプログラミングについて教えてください

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

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

投稿日時 - 2011-06-10 13:16:39

QNo.6799352

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

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

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

参考URL:https://raw.github.com/gist/54745e0a077b63fb4c0e/da823018f4486dd2ecdf7d3ca779d0b6f93bf7bf/saizaAndEtoGui.py

投稿日時 - 2011-06-30 10:56:59

ANo.3

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

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

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

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

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

投稿日時 - 2011-06-10 23:23:23

ANo.2

#!/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()

投稿日時 - 2011-06-10 18:46:16

ANo.1

#!/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()

投稿日時 - 2011-06-10 17:44:51

あなたにオススメの質問