はじめてのPython

概要

これは、旅人の服とこん棒、そして僅かなCOBOLだけを持った勇者ケンが、Python(パイソン)という大蛇を相手に死闘を繰り広げ、後に和製ビルゲイツと呼ばれるまでの辛く長い道のりを綴った現在進行形の物語である。今日もまた、新しい伝説が生まれる…

  1. プロローグ
  2. COBOLの限界
  3. Pythonへの興味
  4. Pythonのインストール
  5. Pythonの特徴 .....2005/3/4 up
  6. Pythonの起動
  7. Pythonエディタ
  8. 和訳Helpの入手
  9. Python記述 vol.1
  10. Pythonスクリプトの呼出し .....2005/2/21 up
  11. エディタ本来の使い方 .....2005/3/4 up
  12. ヘルプの和訳化 .....2005/3/4 up
  13. ファイルの読み書き .....2005/3/4 up
  14. 今後の予定 .....2005/3/4 up

プロローグ

それはある読者から届いた一通のメールが始まりだった。差出人の素性はわからなかったが、あらゆるプログラム言語に精通していることは文面から感じ取ることができた。そしてメール本文はこう締めくくってあったのだ。

「プログラミングを学ぶのにCOBOLが適している」というのは私にはかなりギャグに聞こえるのですがどうなのでしょうか

この言葉は私の築き上げたものを根底から覆すのに十分だった。プログラムの言語選択なんて、記述の違いだけでどれも同じだろ?むしろ記述する場所やフローチャート=ワンステップという概念を持つCOBOLはプログラム初心者を対象にした場合、本当に適していないのか?私は速攻で返信を出すことになる。

井の中の蛙、大海を知らず [COBOLの限界]

いつも熟練者からメールで言われるのは、COBOLはダメだということ。どこがどうダメなのかは一切語られることなく、とにかくダメだと。それを問いただしても一度だって返信がきたためしがない。今回も返信は期待できないな…、そう思っていた矢先にKさん(前回の差出人)より返信が届いた。Kさんは、決して驕ることなく、見下すことなく、懇切丁寧にCOBOLの置かれた現状を私にもわかるよう説いてくれていたのだ。私は感動すら憶えた。そして悟った。自分はCOBOLという言語から一歩も外に出ていないじゃないかと。他言語の現状を何も分かっちゃいないんだと。

安西先生、バスケが…したい…です [Pythonへの興味]

メールを通じ、Kさんに初心者向けの言語としてお勧めの言語は何かと相談してみた。そこで教えていただいたのが、今回やってみようと思ったPythonという言語だ。Javaという選択肢も勿論ある。しかし私にはどちらも同じ位置からのスタートである。また最終的にはLispの習得も考慮した末、Pythonに決定したわけだ。COBOLで組めれば他言語でも組めるはず。ただし開発スピードは下手をすると百倍以上の違いが生じると言われる。じゃあそのパワフルな言語を体験してみようじゃないか。

はじめてのニシキヘビ [Pythonのインストール]

Pythonは完全オープンソースである。つまり無料だ。プラットフォーム(使用OS)も網羅され動作環境は問題ない。早速、Pythonサイトからダウンロード開始。どれがいいのかよくわからないので、Python 2.3.4 (windows) をダウンロードしてみる。インストールには、ちゃんとしたインストーラがあるので超楽チン。あっという間にセットアップ完了。ははは、勝った。これで今日から私も蛇使いだぜ。おっと大事なことを忘れていた。Python(パイソン)は、和訳するとニシキ蛇のことなんだ。開発者がモンティ・パイソンの大ファンだったことから名付けられた、そうサイトに書かれていた。ちなみにRubyという言語は日本人が作ったんだ。きっとワンピースの大ファンなんだろう。うん、それはルフィーだ。

トキメモ [Pythonの特徴]

ここでPythonの主な特徴を挙げてみる。他のサイトでも書かれているので、ここでは自分で感じた部分だけを書くにとどめよう。

アムロ、イキます! [Pythonの起動]

じゃあ早速やってみるか。おもむろにPythonを起動する。よくわからないがPythonと書かれたアイコンを起動。おおっ、DOSプロンプトじゃんか。エディタとか無いのか?まあいいや、秀丸にPython用マクロがあるかもしれない。後日探そう。まずは画面に打ってみる。

>>> print 'hello'
hello

おおっ!パソコンが喋った!というか、この程度じゃ今日び小学生だって驚かない。続けてやってみる。

>>> 2+2
4

ほほう。そう来たか。どうやらこの蛇、初歩的な算数は出来るようだ。じゃあこれはどうだ?

>>> a,b=3,5
>>> print a,b,a+b
3 5 8

や、やるじゃん。このニシキヘビ、できる。宣言なしで変数が利用できるじゃないか。COBOLで同じことをするためには、WORKINGで予めa,b,cを作成(宣言)し、c=a+bという算術式を表示命令の前にやっておく必要がある。既にCOBOLは負けてるぜ。他に何かないかとヘルプを開いてみる。ん?んん?ジーザス…全部英語やん。。。ちなみにこの画面(Command line)を終了させる時は「Ctrl+Z」だ。

こ、これがニュータイプ… [Pythonエディタ(IDLE)]

DOSプロンプト画面以外にもPythonの起動が出来ないかと、色々いじってるうちに発見した。Pythonメニュー内にある、「IDLE (Python GUI)」を起動してもPythonを利用できるじゃないか。しかも予約語をタイプすればオレンジ色に変わるし、コロンを打って改行すれば自動的にインデントしてくれる。これはすごく便利だ。今度からこっちを利用するようにしよう。この画面(GUI)を終了させる時は「Ctrl+Q」だ。

翻訳コンニャク [和訳Helpの入手]

ヘルプが英語表記ということで、いきなり座礁に乗り上げた感はあるが、気を取り直して突き進む。と、そこへ助っ人が掛けつけて来てくれた。「へへへっ。旦那、日本語訳ヘルプありますぜ!」ナニッ!?その男は某サイトからダウンロードしてくれたヘルプファイルを手渡すと何処かに去って行った。いい奴だ。水戸黄門にならって『乳母車の弥七』と命名してやろう。ヘルプファイル版のほかに、PDF、HTMLファイルでも日本語訳が配布されているので、自分に合ったものを利用するといいだろう。早速、この中にあるチュートリアルを読んでみる。フムフム…

蛇の飼い方 [Pythonの記述 vol.1]

>>> 7/2
3
>>>7.0/2
3.5
>>>7.0/3
2.3333333333333335
おお、そういうことか。整数だけの演算だと小数点は切り捨てになるんだ。そして小数点以下まで指定しておけば、少数点以下までの計算をしてくれる、と。
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range() は、数列リストを自動で生成する便利な組み込み関数だ。1〜10じゃなく0〜9だって点に注意しなきゃいけない。じゃあどうしても1〜10にしたいならどうすんのさ?

>>> range(1,11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ふははは、楽勝だ。range(スタート値,エンド値)、すなわち範囲さえ指定してやればいいってこと。こういう関数系がとにかくCOBOLは弱い。このrange()関数を使って、今度は10回ほどパイソンに「こんにちは!○回目です」と言わせ続けてやろう。

>>> for x in range(1,11):
	print 'hello!',x,"desu"


hello! 1 desu
hello! 2 desu
hello! 3 desu
hello! 4 desu
hello! 5 desu
hello! 6 desu
hello! 7 desu
hello! 8 desu
hello! 9 desu
hello! 10 desu

END文の代わりにインデント(字下げ)という文法は変わってるけど、馴れればソースが見やすいし、解かりやすい。for文は他言語でも頻繁に利用される繰り返し命令。文の最後に「:」(コロン)をつければ、それ以降の文をインデントがなくなるまで実行されるって仕組み。なお、文字列は「'」でも「"」でもOKという点も何気に注目だ。

>>> for x in range(5,11):print 'hello!',x,'desu'

hello! 5 desu
hello! 6 desu
hello! 7 desu
hello1 8 desu
hello1 9 desu
hello! 10 desu

「:」さえ付ければ、改行しないで続けて記述することも可能なんだ。でもインデントしないとソースコードが解かりづらい諸刃の剣。素人にはお勧めできない。今度は別の命令語を使って同じ処理をやってみる。

>>> a=5
>>> while a<=10:
	print 'hello!',a,'desu'
	a=a+1


hello! 5 desu
hello! 6 desu
hello! 7 desu
hello! 8 desu
hello! 9 desu
hello! 10 desu

while文という繰り返し命令。whileとは〜するまでの間だけ、みたいな意味合いだ。注意としては「条件を越えるまで」ではなく、「条件を満たしている場合だけ」という点。条件に見合う間は以下の命令を繰り返しますよということだ。

他人の蛇を操る [Pythonスクリプトの呼出し]

ここまでやってきて、ふと疑問に思う事がある。これ、毎回自分で入力しなきゃダメなのか、と。PythonはBasicと同じインタプリタ(コンパイルを実行時におこなう)ではあるが、別でソースプログラムだけ書いておいて実行させるのが普通だろう。毎回毎回ポチポチとキーボード打ってらんない。じゃあどうやるんだろう?

まず、予めテキストエディタ(メモ帳とか)で簡単なソースを作成してみた。

print 'hello!'
これを「test.py」という名前で自分がPythonをインストールしたフォルダへ保存する。ちなみに「.py」という拡張子がPythonのスクリプト(ソース)を指すんだ。じゃあ実際に起動してみようじゃないか。
>>> import test
hello!
でけた。簡単だね。importという命令で呼出すことができるんだ。COBOLでいうところのCOPY文と同じだと思えばいいかな。CALL文なんかのサブルーチン的な用途とは若干違うと思うけど。まぁ何か分かったらドンドン追記していこうと思う。楽しいぜPython!

新しい武器を手に入れた [Pythonエディタの実力(IDLE)]

「IDLE (Python GUI)」は便利なんだが、常に対話(Shell)モードというのは使えない。エディタとしての必須機能(新規・編集・保存)が出来なければダメだろう。そう思いながらIDLEをカスタマイズできないか探りをいれる。ん?これか!?画面上部の「Option」の中に「Configure IDLE」というのがある。この中の「General」というタブに、「Startup Preferences」というのがあるじゃないか!ここでスタート時に編集モードで起動するか対話モードで起動するか選択できるようになっている。すぐさま「Open Edit Window」にチェックを入れて「OK」をクリック。これで次回からはエディタとして利用できるね。

ちなみに実行する時は「Run」→「Python Shell」で対話モードへと切り替えられるぞ。次回の起動時はまた編集モードに戻るんだ。

トキメモ [Python和訳ヘルプへの置き換え(IDLE)]

このIDLEは「F1」ボタンでヘルプファイルを開くようになっている。でも英語だから意味がわからない。実は上に記述した「和訳Helpの入手」のヘルプファイルを現行の英語ヘルプと置き換えてあげれば、いつでもF1キーで和訳ヘルプを呼出せるようになるから知っておくと便利だよ。

How to replace Help file

  1. Pythonをインストールしたpython23フォルダ内のdocフォルダに英語ヘルプがあるのを確認する
    (例:Cドライブ直下であれば、\c:\python23\doc\Python23.chm)
  2. このヘルプを削除するか、もし消すのが怖いならファイル名を変更する
  3. ダウンロードしてきた和訳ヘルプをさっきの英語ヘルプと同じ場所に移動する
  4. 和訳ヘルプの名前をさっきの「Python23.chm」に変更
  5. IDLE(Python GUI)を起動後、F1キーを押してヘルプを確認
  6. 鼻血ブー

あとはチュートリアルを目を皿のようにして眺め倒すと、ちょっぴり幸せになれると思います。For beautiful human life.

マイケル、マイケル、空気が読めない [Sample code: ファイルの読み書き]

今度はファイルの読み書きをやってみる。「#」はそれ以降をコメントにする記号。案外知られてなかったりするけど、Cobolでは「*>」で同じようにコメントが書けるぞ。

# テキストファイルを1行読んでは1行書く

try :
	i = open("C:/temp/text1.txt","r") # input
	o = open("C:/temp/text2.txt","w") # output
	while 1 :
		s = i.readline()
		if s == "" :
			break
		o.writelines(s)
	i.close()
	o.close()
	print "### Mission complete! ###"
except :
	print "??? file not found! ???"

コレが実行結果。 ※ソースは「test5.py」にて保存済み。入力ファイルは作成済み

>>> import test5
### Mission complete! ###

じゃあわざと入力ファイル(C:/temp/text1.txt)を削除して再テストしてみる。

>>> import test5
??? file not found! ???

ちゃんと動作してるようだ。言い忘れたけど出力ファイル(C:/temp/text2.txt)は無ければ勝手に作られるし、存在すれば上書きされる。なんと追記も可能なんだ。用途に合せて変化させよう。open()関数のことはヘルプファイルに詳しいことが書かれているので説明は省略。

さ〜て、来週のサザエさんは? [次回更新予告]

カツオです。最近プログラミングにハマっちゃって毎日遅くまでコードを書いてます。お陰で学校の授業はさっぱり。さて次週は、

  1. ワカメ、はじめてのチューしようか (Pythonでの抽象化にチャレンジ)
  2. 花沢さん、中嶋に黙れメガネ発言
  3. マスオ、盗撮で書類送検

以上の三本です。お楽しみに♪ (to be continue...)


Back