■
30分プログラム、その150。n日後を返す関数を返す関数。
整数nを渡すと「日時のデータを受け取って、n日後の日時を返す関数」を返す関数を作ってください。 関数を返す関数が作れない場合は、関数の代わりになるようなオブジェクトでも構いません。
Pythonの対話的インタプリタで表現すると下のようになります。
>>> def n_days_later(n): ????? >>> five_days_later = n_days_later(5) >>> datetime.datetime.now() datetime.datetime(2007, 7, 20, 20, 11, 42, 78000) >>> five_days_later(_) datetime.datetime(2007, 7, 25, 20, 11, 42, 78000)出題の意図としては「関数を返す関数」と「日時の差分の扱い方」を、それぞれ単体だと簡単すぎるので合わせ技にしてみた、というところです。
それでも簡単そうだったので、慣れないPythonでやってみる。
使い方
$ python n_day_later.py today : 2007-10-08 00:19:49.084366 5 days later : 2007-10-13 00:19:49.084366
ソースコード
- 日付はdatetimeモジュールで扱う
- 日付の差分はtimedeltaクラスを使う。この設計はいいかも
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- # # n_day_later.py - # # Copyright(C) 2007 by mzp # Author: MIZUNO Hiroki <hiroki1124@gmail.com> # http://mzp.sakura.ne.jp/ # # Timestamp: 2007/10/08 00:10:48 # # This program is free software; you can redistribute it and/or # modify it under the same terms as Python itself. # from datetime import * def n_days_later(n): return lambda d: d + timedelta(days=n) f = n_days_later(5) n = datetime.now() print "today : %s" % n print "5 days later : %s" % f(n)