時間の関数を使った例です。
1: #! /usr/bin/python 2: 3: import time 4: 5: (Year, Month, Day, Hour, Minute, Second, Weekday, Day, Dst) = time.localtime(time.time()) 6: 7: print "Content-type: text/html\n\n" 8: print "<HTML><H1>現在時刻 ", Hour, "時", Minute, "分", Second, "秒です</H1></HTML>"
このプログラムは「現在時刻 13時 30分 2秒です」といった表示をします。
3行目で、時間の関数を使いたいわけですが、これはいきなり使うことはできず、
別のモジュール(ライブラリ、クラス)から取り込む(importする)ことになります。
ここで「time」というモジュールを取り込みます。
Pythonでは、けっこう基本的と思える関数とかでも、モジュールの importが必要です。
5行目は、現在時刻を得る関数(メソッド)を使ってます。
右辺の「time.localtime( )」という関数、
これは「time モジュールの、localtime() 関数(メソッド)」ということになりますが、
これで現在時刻の年月日時分秒などの配列が得られます。
ここで「localtime( )」の( )の中には「秒で表した現在時刻」を入れる必要があるのですが、
これまた「time モジュールの time() 関数」で得られるので、
結局「time.localtime(time.time())」ということになります。
これで、左辺の変数 Hour、Minute、Second に、それぞれ現在の、時、分、秒、の値が代入されます。
7行目は、CGIのお約束です。
8行目で、print文を使ってHTMLを作ります。
ただし、Perlと違って print文の " " 内に直接変数を書き込むのは出来ないようなので、
上のように、「" "」で囲まれた固定された文と変数とを「, 」をはさんで交互に書きます
(別に、printf みたいなを使い方もできます)。
ちなみに、Perlと違って「"」と「'」でふるまいが変わることはないです。
次に、時刻によってあいさつを表示するプログラムを作ってみましょう。 ここでは「if 〜 elif 〜 else」という条件分岐を使います(「elsif」じゃなくて「elif」になります)。
1: #! /usr/bin/python 2: 3: import time 4: (year, month, day, hour, minute, second, weekday, day, dst) = time.localtime(time.time()) 5: 6: if hour in range(6, 10): 7: Aisatsu = "おはようございます!" 8: elif hour in range(10, 20): 9: Aisatsu = "こんにちは!" 10: else: 11: Aisatsu = "こんばんは!" 12: 13: print "Content-type: text/html\n\n" 14: print Aisatsu
時刻から言葉の場合分けをする、基本的なロジック部分はPerlの場合と同じですが、
大小比較とは違った方法を使ってみました(Perlの例のような大小比較でも出来ます)。
6行目は「もし、変数hourが[6,7,8,9]のどれかに含まれているならば」ということを意味しています。
プログラムの「range(6, 10)」という部分が、[6,7,8,9]という範囲の配列を作ります
(range(x, y) で、x以上 y未満の整数になります)。
そして「in」が、この場合「含まれているか?」の判断をする演算子となります。
書き方の形式は、Perlと違って「かっこ」はいらないですが、そのかわりに、
ifとかの行の最後は「:」が付くのと、そのとき実行される部分はインデント(字下げ)される必要があります。
この、インデントでブロック(スクリプトの中のまとまった処理の部分)を表現するというのが
Pythonの見た目上の大きな特徴です。
同じブロック内でインデントの先頭をそろえますが、その空白の長さは何文字でもかまいません。
これによって、かっこの対応などを気にしなくてよくなります
(かっこをつけてもエラーにはなりません。もちろん正しく対応していればですけど)。
また、形式を限定することで、誰が書いても同じような形式になって読みやすいものになります。
この辺が Perlとは哲学的に違うところです。