牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

ほんの一寸ばかりプログラミングに興味あるピヨコちゃんにおくる超ゆるゆるパイソン入門 「第一話 とりあえずやってみるっ!!」

若干修正
若干修正、次回予告変更
イラスト1点追加と若干修正

ピヨコちゃんのパイソン入門「第一話 とりあえずやってみるっ!!」


もくじ

  • プログラミングは魔術に近い
  • なぜPythonか?
  • まずは道具をそろえる
  • 早速コード書く、2行だけ。
  • 書いたら実行!
  • できた、その次は...
  • よく読み、よく書くこと
  • おまけ:いちおうコードの簡単な説明とか
  • 次回予告

# プログラミングは魔術に近い


これは機械科学で有名な教科書*1の冒頭にある一節。
ホイミの呪文はドラクエの中でしか使えないけど、プログラミングは現実世界でも使える。魔法が使えたらって考えるだけでも面白そうだと思わない?

# なぜPythonか?

多くのプログラミング言語がある中で、なぜPython(パイソン)を取り上げたのか?
理由は好きか嫌いかその他いろいろ...何でもよかったりする。
とりあえずPythonはプログラミングを学ぶのに最適な言語だっちゃと信じよう。そこに間違いないから、おそらくは。


理由が欲しければこの『How To Become A Hacker: Japanese(和訳)』を読んでみて。
(私が選んだ理由は...長くなるので以下略)

# まずは道具をそろえる

プログラミングにはやっぱり道具が必要だよね。

  • Mac(パソコン本体。MacBook/Pro・AiriMacとか)
  • Mac OSX*2
  • Python2.4以上(ターミナルで「python -V」と入力すると確認できるよ。Mac OSX 10.5は最初からPython2.5のはず)
  • Carbon Emacs*3をダウンロードしてインストール。(プログラムを快適に書ける超有名なエディタ*4


これだけ。MacCarbon Emacsをインストールすれば準備完了。*5


その他の環境の人は...すまんが自力で。

  • Windowsの人は、webで調べてみて。環境の整え方くらいすぐ見つかると思うよ。少なくともMacより情報多いはずだよね?。
  • Linuxの人はLinux使ってるくらいだからPythonの環境整えるくらい簡単だよね?根拠無いけど。
  • 実際は、Mac購入が最も手っ取り早いかもしれない、予算あればの話だけど


うまくいかなかった時のために、うまくいく呪文を教えるよ。心の中で十回唱えてみて『とりあえずググれ』。

# 早速コード書く、2行だけ

実生活でも利用できる実用的なコードを書く。たった2行だよ。 そう、2行だけ。
まずファイルを作る。Carbon Emacsを起動してメニューバーの『File』から『Visit New File』を選択してね。場所はとりあえずホームにして、名前は『loto6.py』とでもしておこう。
なぜなら、これから『Loto6』の数字を選ぶプログラムを書くから。
1〜42の数字から6個の数字を選ぶ呪文を唱えてみよう。ファイルに次のコードを書き込んでね。

import random
print random.sample(range(1, 43), 6)

この2行で完了だよ。

保存するのを忘れずに。
やり方がわからなければメニューバーの『File』から『Save』を選んでね。(保存できれば他の方法でも)

# 書いたら実行!

メニューバーのPythonからStart Interpreterを選んでみて。
ウインドウが二分割されて下にPythonほにゃららって表示されてたよね。
ここにプログラムを実行したときの結果が表示される。これで準備OK。


次はプログラムを実際に実行してみよう。書いたプログラムが表示されているウインドウを一度クリックして、それからメニューバーの『Python』から今度は『Eval Buffer』を選ぶとプログラムが実行されるよ。


どこか間違っていれば、「Tracebackほにゃらら〜」とか、「HogeHogeError:〜とか」表示されるよ。
カッコがひとつ多かったとか、"random"が"randam"とかになってない?
","が"."とか、全角英数文字になってたとか。
うまく表示されるまで、何回も見直して、修正・実行してみよう。間違いはよくあること、直せばいいだけのこと。


実行結果が下のウインドウに表示されてるはずだけど、どう?
問題なければ、こんなのが表示されてるはず。

[40, 19, 38, 16, 35, 6]

違う数字が6コ表示されてる?
実行するたびに違う数字がでるから、これとは違う結果になってOKだよ。

[5, 38, 32, 4, 30, 29]
[31, 15, 20, 23, 12, 2]
[24, 30, 25, 27, 36, 26]
[2, 12, 13, 16, 17, 41]

こんな風に実行するたびに変わる。《random》は英語で「成り行き任せの」って意味だからね。何回か実行してみよう。


これでLoto6の数字選びに困らなくなるね。とても実用的だ。



『あなたはrandom.sample()のじゅもんをおぼえた』

# できた、その次は...

少し手を加えて、実行結果を見やすくしてみよう。
できれば、小さい数から順番に並ぶようにしたいよね。


選んだ数字の配列を変数(variable)に入れて、小さい順に並び変えて...
って説明よりも、『まずやってみる』だよね。

import random
variable = random.sample(range(1, 43), 6)
variable.sort()
print variable

そして実行

[1, 9, 13, 34, 40, 41]

また実行するたびに結果は違うと思うけど、小さい順に並んでるよね?
これで更にLoto6の数字選びが便利になった。


もう少しやってみる?
そしたら、この呪文をLoto6以外でも使えるようにしてみようか。
たとえば、ランチに何食べるかを決める。

import random
print random.sample(range(1, 2), 1)

これで1がでたらA定食、2がでたらB定食とか。


簡単すぎる?
じゃあ、次の5つ「Japanese・American・Chinese・Italian・French」どれにするか選べるようにしてみて。結果が数字ではなく『Japanese』とか文字列でね。
これは気が向いたらでいいよ。解答は提示しないし。


わからないことは調べてやってみよう。よく言うよね「とりあえずググれ」って。さっき言ったっけ?


参考になるwebで見れるPythonの文書(和訳)をリストアップしておくね。

# よく読み、よく書くこと

プログラミング技術を上達させるためによく言われるのは「よく読み、よく書くこと」。


でも、初めはまったく読めないよね。何の知識もなく、いきなりフランス語やドイツ語の文献読み書きできないのと同じ。母国語以外すべて英語に聞こえたり。


初めのうちはよく解らなくてもコードをコピペしないで入力してみよう。何度もやっていれば、何となく読めるようになってくるよ。不思議と勉強してない他の言語も。


どうしていいかわからない人は、短いコードを探して改造することをお薦めするよ。少しずつでも知識が広がっていくと思うし。


読めるようになると、いつの間にか少し書けるようになってたりする。だから、たくさん読んで少し書かいてみる。それを繰り返してみよう。気がつくといろいろな呪文を唱えられるようになってるかもしれない。それ以外にも身に付いてたり。


大切なのは興味を持つこと、楽しめること。そして、諦めないこと。

# おまけ:いちおうコードの簡単な説明とか


簡単と言いつつ結構長かったりする...

import

たとえば、料理をするとき包丁とかを使うよね。シャツから取れたボタンを付けるときは針と糸を。その状況によって道具は変わるし、道具のある場所は別々だったり。料理道具はキッチンに、裁縫道具は裁縫箱に。

import random

直訳すれば「『random』を取り込む」。
これは、子供が「DSやってもいい?」と母親にたずねるように、「『random』使うよ」と機械(コンピュータ)に宣言してる。これを伝えないと『random』を使わせてもらえない。相手はお固く融通が利かない、なんせ機械だから。
そして、Nintendo-DSのドラクエ4をやるように、『random』の『sample』を使う。それが『random.sample(...)』。『random』には他にも『random.choice(...)』とかその用途に合わせて様々なものがある。
DSだけでしかできないゲーム、PSPにしか無いゲームとかあるよね。大雑把にいうとそんなこと。


「randomを使うよ」って宣言する方法は他にもある。

from random import *      #randomの機能すべて(*)使える
form random import sample #randomからsampleだけを使える

とかにすると、どちらも『random.sample(...)』ではなく『sample(...)』だけの記述で使えるようになる。
一度そのプログラムソースで宣言すればいいから、何回も宣言する必要はない。たいていプログラムの最初のほうにまとまって書かれていることが多い。

import os
import sys
import random

みたいにね。

とりあえず『import ~』だけ覚えとこ。必要だと感じたら調べてみて。
(ちなみに『#〜』はコメントいれるのに使うよ。#から行末まで何を書いても実行時に無視される。)

randomの『sample』を使う

sampleの意味は「サンプリング」とか「調べるために結果から見本を抜き出す」って意味かな。

random.sample(range(1, 43), 6)

かっこの中の『range(1, 43)』と『6』の2つの情報*6を『sample』に伝える。そうすると『range(1, 43)』の中から『6』個ランダムに選んでくれる。


ところで『range(1, 43)』って何だろうね。"range"の意味は『範囲』だけど、とりえあず調べてみよう。

print range(1, 43)

上のコードを実行するとこうなる。

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42]

[...] で囲まれているのは配列(sequence)といって、プログラミングにおけるデータ構造の一つで〜...なんて長くなるので興味あるヒトはググって調べてみてね。
とりあえず[...]で囲まれてるのは、それでひとまとまりだと思っといて。(ちなみに、[1, [2, 3], 4]みたいなこともできるよ)


そして『range(1, 43)』をよく見てみると、Loto6で選べる数字は『1〜42』なのに『43』になってたりする。なぜだろうね?
わかりやすくするため1〜43の数字に区切りを入れてみる(長くなるから途中省略するよ)

|1|2|3|4|5...|39|40|41|42|43|44|45
^------------------------^

ここが重要なんだけど、区切りは数字の前にある、前にね。『range(1, 43)』のカッコ内の数字は、区切りから区切りまでだから『43』は入ってない。だから1〜42になる。


というわけで、ここでは『1〜42』までの数を使いたいから『range(1, 43)』。

変数とsort()も。

『変数』をつくるには箱を用意する。ここでは『variable』っていう名の箱を用意してる。箱の名前は『var』とか『hogera』など英数文字ならだいたい大丈夫(特殊な例を除いて)。
ちなみに変数は英語で《variable》。

variable = random.sample(range(1, 43), 6)

これは、変数『variable』を作って『random.sample(range(1, 43), 6)』を入れてる。
『=』は左の箱(variable)に、右のもの(random.sample〜)を入れるみたいなこと。右と左が同じという意味ではないから気をつけて。
更に例えれば、『variable』って名前の箱を作って、『1〜42』の積み木から『6個選んだもの』を入れてる感じ。


そして、『sort()』を使って箱の中のものを小さい順に並べる。変数と『.』で繋げてね。

variable.sort()

こんな風に。これを一回やっておけば、変数(ここでは『variable』)の中身がきれいに順序よく入れ替わる。


それから、何度か出てきた『print 〜』は"〜"を表示するぞっていうこと。
よく使うからおぼえておいてね。


# 次回予告

パイソンの制御フローが処理を受ける。この隙に関数を使ってみようとピヨコに強襲をかけた。しかし、for以外にもパイソンには命令文があった。ピヨコの叫びが轟く...


ピヨコちゃんのパイソン入門、次回、『第二話 for制御命令』。
君は、読み書きができるようになるのか?



「第一話 とりあえずやってみるっ!!」おしまい


*1:Structure and Interpretation of Computer Programs (SICP) はMITのWebサイトで閲覧できる。(和訳本「計算機プログラムの構造と解釈」も出版されている)

*2:Mac OSX 10.4以前の人は、Python 2.4以上にアップデートしておいてね。(ちなみに私は、Mac OSX 10.4、Python2.5だったりするよ。2008.07現在)

*3:Carbon Emacsは設定なしでも利用できるお手軽版。ただしMacOSX専用。WindowsLinuxの人は、Pythonを簡単に使えそうな実行環境を探してみてね。(Carbon Emacsは何の設定しなくても使えるけど、普通のEmacsは設定をいじらないと使えなかったりする。そこで初心者は挫折しやすかったり。幾度となく挫折したとしても、使えるようになるまで挑戦する価値のあるモノだと思う。)

*4:Emacsっていうのは無限に便利な機能を拡張できる、プログラミングにとても適した超有名エディタ。プログラミングを快適に楽しく行うためにEmacsVimEclipseのどれか一つ使えると幸せになれるかも。VimEclipseはほぼ使ったことないけどね。(正直に言うとEmacsを初めてさわったときは「ありえない、こんなの絶対無理」って感じで何もできなかった。いくらか使えるようになった現在は、これがなければプログラミングはやりたくないって思う。)

*5:基本的にMac OSXなら買って来て電源を入れれば、すぐプログラミングを始められる。最初からPythonPerlRubyJAVA...その他いろいろたくさん入ってるからね。Emacsを使えるとさらに便利にプログラミングできるようになる。初めはわからなくとも、いつの日か。)

*6:これが『引数』ってやつでプログラミングでちょくちょくでてくる。英語だと《argument》略されてargとか。