2009年11月12日木曜日

python で GUI!

GUIが簡単にできるとな?

gui.py
#!C:/Python25/python
from Tkinter import *

widget = Label(None, text='Hello GUI world!')
widget.pack()
widget.mainloop()
おおお~

pack() とか mainLoop() とかをコメントアウトして動かしてみる・・・ふむふむ。
WindowシステムはCでWindowsプログラミングしたときとおんなじ感じなんかな???
TkとかTclとかは全然しらん♪

2009年11月11日水曜日

pythonの値としての関数、例外処理など

from apptools import StreamApp は、結局謎なまま。

普段の自分やとここで「あーもうわけわかめ、やーんぺ」ってなるんやけど、
ちょっと頑張ってすすんでみる。
てか、わからんことは無視や、無視♪

scanfile.py

#!C:/Python25/python

def scanner(name, function):
file = open(name, 'r')
while 1:
line = file.readline()
if not line: break
function(line)
file.close()


commands.py

#!C:/Python25/python
from scanfile import scanner

def processLine(line):
if line[0] == '*':
print "Ms.", line[1:-1]
elif line[0] == '+':
print "Mr.", line[1:-1]
else:
raise 'unknown command', line

scanner("../res/people.txt", processLine)


お、動いたぞ!

わかったこと
・from "ファイル名(.pyは抜く)" import "関数名" で、他のファイルに定義されている関数定義をもってこれる。Javaのimportみたいなもん。
 ⇒①scanfile.pyに他に実行されるような文があったらどうなる?
・関数を値として取ることができる。特別な記法は無いのでとっても直観的。第一級の値ってやつやね、懐かしい。
 ⇒②引数の数や値が違ったら例外でも起こるのかな?
・raiseで例外を起こすことができる。Javaのthrowみたいなもん。例外に型はないのかな?

①scanfile.pyに他に実行されるような文があったらどうなる?
scanfile.pyに print 'hello world' を足すと、 commands.py の処理の最初で実行されている模様。
つまり、from hoge ってやると hoge.py がとりあえず実行されて、そのあと import foo で foo の値だけ持ってこれるって感じっぽいね。

②引数の数や値が違ったら例外でも起こるのかな?
不必要な引数をprocessLine に足してみると・・・

Traceback (most recent call last):
hello world
File "C:\eclipse35Python\workspace\test\src\commands.py", line 12, in
scanner("../res/people.txt", processLine)
File "C:\eclipse35Python\workspace\test\src\scanfile.py", line 10, in scanner
function(line)
TypeError: processLine() takes exactly 2 arguments (1 given)

おおお、例外出た!(err出力とout出力が混ざってるから行がめちゃくちゃ)

つまり、関数型言語でよくあるようなカリー化は行われてないっぽいね。

楽しい♪

---

Blogger、WYSIWYGな機能がもっと増えたら使いやすいのに。アイテマイズとか欲しいよー、TracのWikiぐらい便利になってほしい。

apptools がみつかんないってなんよ・・・

テキストの次のコードはclass。


#!C:/Python25/python
from apptools import StreamApp
from textpack import marker

class PackApp(StreamApp):
def start(self):
if not self.args:
self.exit('use: packapp.py [-o target]? src src...')


こんな感じでかいていくと


Traceback (most recent call last):
File "./src/PackApp.py", line 2, in
from apptools import StreamApp
ImportError: No module named apptools


apptoolsが見つからないとか言われても・・・(;つД`)

あ、pythonは3.1から2.5にしてみました。
バージョン違いかと思って。
ただ、これ以上昔のには戻りたくない・・・
GAEが2.5らしいから、どうせなら2.5でしたい。

うーん・・・困ったなぁ

2009年11月10日火曜日

とりあえず、テキストのコードを自分の環境に合わせて動くように書いてみた!!!


#!C:/Python31/python
import sys
marker = '::::::'

for name in sys.argv[1:]:
input = open(name, 'r')
print (marker + name)
print (input.read(),)


おおお、これで引数で与えたファイルパスでファイルを開いて次々printしてくれる!!!
すごいすごい、簡単すぎる!

でもいろんな疑問。

・ファイルをオープンしてクローズしてないけどいいのかな?
・input.read() でファイルから読み込んで全部メモリにのっけるの?メモリ食いまくり?
・テキストファイル読み込んでるけどエンコーディング指定してないよ?

そんなわけで、ファイルに日本語書いてみた!
ら!エラー!


Traceback (most recent call last):
File "./src/packer.py", line 8, in
print (input.read(),)
UnicodeDecodeError: 'cp932' codec can't decode bytes in position 17-18: illegal
multibyte sequence


ふむ、UTF-8でファイルを保存したのがだめらしい。

CP932ってなんだ?

http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000716.html

Windowsでの正しい文字コード。
Windowsの文字コードは、一般的には「シフトJIS」だが、正しくは「CP932」である。
「MS932」とも言う。


なんと!!!

ってなわけで、ファイルをあらためてShiftJISで保存してみる。

おおお、動いたー!!!

2009年11月9日月曜日

Cプリプロセッサでプログラミング!?

Cプリプロセッサが関数型言語のインタープリタになってる・・・

http://d.hatena.ne.jp/qnighy/20091107/1257587259

あらゆる意味できもいヽ(;´Д`)ノ

とんでもない才能やなぁ・・・

C言語WindowsGCC、1時間でテトリス作る

http://www.nicovideo.jp/watch/sm8517855

だらだら見るぶんにはたのしかった♪

よし、pythonでテトリス作るぞ!!!<できるのか

2009年11月7日土曜日

とりあえずpython

本棚整理してたらo'reillyのpython入門が出てきた。
バージョン古いやろうなぁ・・・とおもいつつ、せっかくなんで勉強しなおす!

デファクトなIDEとかしらん!
Java-er なので eclipse !

これversionなんやろ?わからん・・・3.5か?Galileo です!!!

pydevってのをいれたらいいらしい。
eclipseのプラグインのURL:

あぁ!?
実行環境あらへんwww
新しいものが好きです(*´∀`)

とりあえず workspace の encoding は UTF-8 にしとく。
今は意味不明やけど。

で、プラグインの Interpreter - Python にインストールした python.exeをセット。
なんかごちゃごちゃいわれるけどOK、OK。
む、いけたのか?

とりあえず新規プロジェクトで Pydev Project えらんでー
src の下に test.py 作ってー
print 'Hello World';
って書いてー
実行! Python Run!

・・・えー!?いきなり syntax error!?

調べてみると・・・Python3.0系だと
print ('Hello World');

と書けとな。

今度こそ!いけー!!!
Hello World
いったー!!!

よし、寝れるwww

他、参考URL: