[an error occurred while processing this directive] [an error occurred while processing this directive]

基本的なTips

まずはHello

str = "Hello, Py!\n"
print str
f_name = "Kei"
l_name = "Takahashi"
print "Hello, %s %s\n" %(f_name, l_name)
%sは後ろの変数リストで順番に置換されます。

変数展開

perlの変数展開みたいなことをしたかったら、"%(変数名)型"と書いて、最後にlocals()を書く。
name = 'kei'

text = 'Hello, %(name)s" %(locals())
改行が入る長い文字列だとこんな感じ。
name = 'kei'
msg = "hello"

print """
To      : %(name)s
Message : %(msg)s
"""%( locals() )
とすると、%(name)sと%(msg)sが変数nameと変数msgの内容に置換される。

配列

A = ('red', 'freen', 'blue')
color = A[0]

長い文字列

str = """hello,
I
am
a
warlus
"""

print str

chompのかわり

perlのchomp()みたいに、文末の余計な改行を削除するには、strip()を用いる。
a = "abc\n"
print a.strip()

乱数

乱数cgi。
#!/usr/bin/python
import whrandom
col = ('#f00', '#0f0', '#00f')
pat = ('Goo', 'Chok', 'Par')
r = whrandom.randint(0, 2)
print "Content-type: text/html\n\n"
print "<html><body style='color:%s;'>%s</body></html>" %(col[r], pat[r])

ループ

for文、だけどforeachっぽい。
print "<table>"
for i in range(3):
	print "<tr>"
	for j in range(4):
		print "<td>i=%d, j=%d</td>" %(i, j)
	print "</tr>"
print "</table>"
range(n)は、0からn-1までのリストを作るので注意。0,1,2としたければ、range(3)です。

ファイル

fp = open("hoge.txt", "r")
for l in fp.readlines():
  print l
fp.close()

split

文字列を分割。
str = "kei:rei:,mei"
A = str.split(":")
A[0] = "kei", A[1] = rei, A[2] = meiになります。
正規表現パッケージのreを使うと、もっと柔軟にできます。
import re

str = """kei, rei, 
   mei"""
A = re.split(",\s*:", str)
これもA[0] = "kei", A[1] = rei, A[2] = meiになります。

標準入力から一行ずつ読む

for str in fileinput.input():
	(strに一行分の文字列が入ってるので、適当に処理する)

コマンドライン引数 (argv, args, argc)

コマンドライン引数はsys.argvに入っています。
引数のリストでループ。
for str in argv[1:]:
       (なんかする)

ファイル一行読んで**する

新しいpythonではこんな風に書けるみたい。
for s in open("sample.txt", "r"):
	print s     # などなど。
互換性重視ならこっち。
fn = open("sample.txt", "r")
for s in fn.readlines():
	print s     # などなど。
whileを使って書きたいとき、EOFに達するとFalseが返ってくるらしい。
fn = open("sample.txt", "r")
while True:
    s = fn.readlines()
    if not s: break
    print s     # などなど。
というふうに書ける。

global変数

global変数のサンプル
関数中でglobalと書いたら、それで外部からアクセスできる。
def hoge():
    global na
    na = "name"

hoge()
print na
書かなかったら、hoge()内で普通のローカル変数naが出来てしまう。

関数・クラス・パッケージ

リストの足し算

例えば (x,y) みたいな二次元データの足し算をしたいとき、リスト内包表現を使うと こんな風に書けます。
A = [1,2]
B = [3,4]
C = [A[i] + B[i] for i in range(len(A))]
enumerate を使った方が少しだけ短い?
C = [a + B[i] for i,a in enumerate(A)]
[an error occurred while processing this directive]