.. title:: Pythonで心理実験 - 準備編2 準備編2:とりあえずpythonを使ってみる ============================================ **A:** さて、今回は簡単なpythonの使い方を解説しておこう。サンプルプログラムを実行したり、練習問題をやってもらう時に必要だからな。 **B:** えー、練習問題なんてあるんですか。 **A:** こういうのは解説を読んでるだけじゃなくて、ちょいちょいと自分でいじってみる方がの見込みが早いのさ。こっちが問題を出すのを待たずにいろいろやってみるのがいい。 pythonのプログラムを手軽に動かす方法を3つ紹介しておこう。それぞれ長所短所があるぞ。 #. pythonスクリプトファイルのアイコンをダブルクリックする #. コマンドシェルからpython [スクリプトファイル名]、または単にスクリプト名を入力して起動する #. pythonインタプリタを使う **B:** アイコンをダブルクリックってのが簡単そうですね。 **A:** Windowsの場合、pythonをインストールした後であればテキストファイルを **".py"** という拡張子で保存するとこのようなアイコンで表示される(python2.5の場合)。 メモ帳なんかでテキストファイルを保存すると勝手に.txtという拡張子を付けられたりするので、ファイルの拡張子を表示するようにエクスプローラの設定を変更しておくといい。 このアイコンをダブルクリックすれば、プログラムを実行する事が出来る。 .. figure:: img/00-2-01.png **B:** 拡張子の表示ってどうするんですか? **A:** そのくらい自分で調べろ、と言いたいところだがサービスだ。Windows Vistaの場合、エクスプローラの画面でAltを押してメニューを表示し、[ツール]→[フォルダオプション]と選択する。 表示されるダイアログの[表示]タブを選んで[登録されている拡張子は表示しない]のチェックをオフにする。 .. figure:: img/00-2-02.png .. figure:: img/00-2-03.png **B:** 表示されました。 **A:** Linux系のOSを使っている人は、こういう具合にアイコンをダブルクリックしてもプログラムが起動するようになっていないかも知れないけど、ディストリビューションによってバラバラなので説明はパス。 まあLinux系OSを使うような人はこんな基本的な説明は必要ないだろう。 **B:** あ、逃げましたね? **A:** いや、環境別にきっちり解説を作ろうとしたら時間がいくらあっても足りないから。続いてコマンドシェルを使う方法だが、B君はコマンドシェルって言われてわかるか? **B:** 全然分かりません。 **A:** やっぱり知らないか。 **シェル** というのは雑に言うとWindowsやMacOSなどのOSと利用者のインターフェースになるプログラムのことだ。Windowsでいうとエクスプローラがシェルだね。 アイコンをごみ箱へ入れたらファイルがごみ箱へ移動されたり、ダブルクリックしたらプログラムが起動したりするのは、シェルの機能によるものだ。 **B:** へー。なんだかよくわかりませんが偉いんですね。 **A:** そうだな。それで、コマンドシェルというのは、このファイルを削除したいとかプログラムを起動したいという人間の意図をキーボードからコマンドを入力することによって伝えるタイプのシェルなんだ。 Windows Vistaではcmd.exeというプログラムがそれに該当する。Vistaなら[スタートメニュー]→[すべてのプログラム]→[アクセサリ]→[コマンドプロンプト]で起動できるかな。XPも確か似たような場所にあったと思う。 **B:** どれどれ、起動っと。 .. figure:: img/00-2-04.png **B:** あー、なんか昔のパソコンみたいな感じですね。お父さんが使っていたのがこんな感じだったような。 **A:** 今でもバリバリ使われているんだけど、ネット閲覧やワープロ、年賀状印刷しかしないような用途だと見かける事は少なくなったね。 ここにキーボードでコマンドと呼ばれるものを入力して作業するんだ。ファイルを削除するならdel、移動するならmove。 **B:** そのコマンドってのは覚えなきゃいけないんですか? **A:** そうだね。 **B:** うわ、そんなの不便じゃないですか。 **A:** それを補って余りある利点もあるのさ。でも、それを語り出すとどんどん横道へ逸れていっちゃうから置いとこう。 コマンドシェルを使うと、python [スクリプトファイル名]と入力するとプログラムを実行できる。ファイル名がprogram.pyだったらpython program.pyと入力するわけだね。 OSにもよるんだけど、ある条件を満たしていれば単にprogram.pyとだけ入力しても起動できる。細かい話をすると、Windows XPやVistaならまずこの方法が使えるが、Unix系OSを使う人はスクリプトの1行目の書き方による。 詳しくはいずれ機会があれば。そうそう、最後にEnterキーを押すのを忘れないように。 **B:** あのー、さっきから気になってるんですが、pythonスクリプトの「スクリプト」ってなんですか。 **A:** ああ、スクリプトてのはプログラムと同じような意味だ。って言ったら専門の人から石投げられそうだけど、まあ大外れでもない。 インタプリタってのは、pythonみたいな言語で書かれたプログラムを機械語に翻訳して実行するプログラムの事だよ。PCは機械語しかわかんないし、人間には機械語を使うなんてまず無理。 だからインタプリタに毎回翻訳させながら実行しているんだよ。 **B:** へえ。ぼくがゼミの英語論文を読めないからC君に翻訳してもらってるようなもんですね。 **A:** …今のは聞かなかった事にしよう。 **B:** あれ、試しにさっきの画面でpythonって入力してみたら、こんな表示が出てくるんですけど。 :: 'python' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 **A:** ああ、それはパスが通ってないな。 **B:** パス? **A:** ああ、詳しくはコマンドシェルについて自分で勉強してほしいんだけど、簡単に言えばコマンドシェルがpython.exeというプログラムを探す場所の指定の事さ。 コマンドシェルは環境変数PATHに設定されている場所から実行プログラムを探すんだが、python.exeが環境変数PATHで示されているパスの中にないんだ。 **B:** ????? **A:** ふむ。きちんと理解してもらおうとするとpythonの解説の前にシェルの解説をしなきゃいかんな。 ひとつひとつ疑問を解消してから先へ進みたいか、それともとりあえずプログラムを動かしてみたいか? **B:** 早くプログラムを書いてみたいです。 **A:** よし。じゃあとりあえずPATHの設定の概要だけ書いておくから、後で自分で設定してみること。 PATHの設定についてはネットを検索したら親切な解説がたくさん出てくるから、それを参考にして挑戦してみるように。 Vistaの場合、[コントロールパネル]→[システムとメンテナンス]→[システム]と選んで[システムの詳細設定]を選ぶ。ダイアログが開くので、そこの[環境変数]をクリック。すると下のような画面が表示されるので、 [ユーザーの環境変数]の一覧を見て、PATHがすでにあれば[編集]。なければ[新規]でPATHという変数を追加して、pythonのインストールディレクトリを追加する。 Windows版のpython2.5の場合、インストール時にオプションを変更していなければ、C:\\Python25がインストールディレクトリだ。PATHを追加する時の書き方は下の図がヒントになっているが、各自で調べてみてほしい。 .. figure:: img/00-2-05.png **B:** AさんのPCは設定してあるんですよね、どれどれ、python、っと。 **A:** こら、人のPCを勝手に! **B:** pythonって入れてEnterしてみても、特に何も起こらないんですけど、これでプログラムは起動してるんですか? .. figure:: img/00-2-06.png **A:** これはpythonのインタプリタが起動した画面だ。最初に挙げた3つめの方法だな。ちょうどいいから3つめの方法の解説をするか。 **B:** おお、先回り! **A:** ちっとも偉くないぞ。pythonはコマンドシェルから起動する時に、続けてスクリプトファイル名を指定すれば、そのファイルを読み込んで実行する。 しかし、何も指定されなければpythonインタプリタが起動するんだ。Windowsの場合、スタートメニューにPython (command line)という項目ができているはずなので、それを選んでもインタプリタを起動することができる。 .. figure:: img/00-2-07.png **B:** インタプリタ。さっき出てきましたよね、えーっと…なにするんでしたっけ。 **A:** 翻訳だな。ファイル名を指定すると、そのファイルに書かれている内容を立て続けに翻訳して実行する。一方、インタプリタが起動した状態では、 入力されたpythonのプログラムを1文ずつ翻訳して実行し、次の文が入力されるのを待つ。試しに1+1と入力してEnterを押してみなさい。 **B:** 1+1、っと。ちゃんと2が出ました。 :: >>> 1+1 2 **A:** **>>>** は **プロンプト** と呼ばれるマークで、これが一番下の行に表示されていれば、pythonインタプリタはユーザからの入力を待っている。 大規模なプログラムを書く時に一文ずつ入力していくのは不便だが、ちょっと何かを確認したい時には毎回結果が表示されるので非常に便利だ。 **B:** ふむふむ。なるほど。 **A:** 詳しい操作はおいおい覚えていくとして、とりあえず終了しようか。終了するにはウィンドウの右上の[x]をクリックしてcmd.exe自体を閉じてしまってもいいのだが、 pythonインタプリタだけを終わらせたい場合は、プロンプトが出ている状態でCtrlキーを押しながらZを押す。そうすると^Zというのが表示されるので、Enterを押す。これで終了する。 **B:** 終了しました。 **A:** さて、最後にまとめておくか。2番目の方法の長所をまだ説明していなかったが、それは「コマンドラインオプションを指定できる事」と「エラーメッセージが見やすい事」だ。 **B:** コマンドライン、オプション? **A:** 簡単に言うと、実験結果を保存するファイル名を指定したり、実験のパラメータを指定したりする事が出来る。アイコンをダブルクリックする方法でこういった指定をするのは厄介だ。 **B:** 厄介? 不可能ではないんですね? **A:** ダイアログを自作するなどの方法があるな。ただプログラムとしては複雑になる。 あと、エラーメッセージというのは、例えば2や3の方法だとプログラムが文法的に間違っていた場合に以下のようなメッセージが表示されるんだ。 .. figure:: img/00-2-08.png **B:** あー。なんだかよくわかりませんが…。 **A:** この場合、python sample.pyと入力してスクリプトを実行している。2の方法だな。それで、line2にsyntax error、つまり2行めに文法エラーがあるというメッセージが返ってきている。 これを見れば、2行目の翻訳の時に何か問題が生じていることがわかるので、その場所を重点的にプログラムを点検すればいい。 **B:** はあ。 **A:** まあ、実際に自分でプログラムを書いて間違えてを繰り返していたら、そのうちわかるようになるだろう。ちなみにアイコンをダブルクリックする方法だと、エラーは表示されるけど一瞬で消えてしまうので、何が悪かったのかわからない。 なにもわからないのと、なんだかよくわからないけど手がかりがあるのでは、点検のしやすさが全然違う。 **B:** そんなもんですか。 **A:** そんなもんさ。これでpythonのプログラムを実行する方法はだいたいわかったかな。 他にも何通りか方法があるけど、それを使いたいと思うような人は多分こんな解説は必要ないんじゃないかなと思うのでパス。 次回からやっとプログラムの作成に入るけど、その前にpythonのプログラムを書くにあたって3つ注意しておいてほしい事がある。 **B:** へ? なんですか? **A:** それはだな、 #. プログラムは原則として **半角** で入力する。 #. サンプルプログラムの行頭の字下げはpythonのプログラムでは重要な意味があるので削除したり付け加えたりしない。 #. #より右に書かれている文字列は後でプログラムを読みやすくするためのメモであり、プログラムとして解釈されない。 **A:** まず半角ってのはわかるか? **B:** アルファベットとか数字が格好いいやつですよね。 **A:** ん。言いたい事はわからんでもないが違う。半角の意味を正確に説明しようとすると長~くなるんだが、要するに文字入力のモードを「半角英数」にした時に入力できる文字だよ。 サンプルプログラムでは日本語の文を画面に表示する関係で日本語を入力する場面もあるけど、逆に言うとそういう時以外は半角英数で入力すると思っておけばいい。 **B:** は~い。 .. figure:: img/00-2-09.png **A:** 2つ目は具体例を出すと、pythonのプログラムではこういう風にそれぞれの行の先頭に空白文字が入っている事がある。こんな感じだ。 :: while x in data: if x < 1000: s += 1 else: l += 1 **B:** 何の事だかさっぱりわかりませんけど、確かに行によって先頭の空白が違いますね。 **A:** そう、それが字下げだ。この空白には意味があるので、勝手に増やしたり削除したりするとエラーになるから気を付けてほしい。 **B:** ふむふむ。 **A:** 続いて3つ目。プログラム中で#の後に続く文字は、プログラムとして解釈されない。だから、後でプログラムを読み返したり、他の人がプログラムを読む時に分かりやすいようにコメントを書いておくんだ。プログラムの先頭にある#から始まる行は特別な意味があるんだが、それはまたいずれ。 **B:** わかりました。メモメモ…。 **A:** では、いよいよ次回からリーディングスパンテストの作成に挑戦するぞ。 **B:** はーい。