プログラムを勉強しようとしてつまづいた話 〜その5〜
人間語からプログラム語に翻訳する
前回書いたプログラムの一部
0から1の間の数値を乱数によりふたつ作る
は
x = random.random()
y = random.random()
に翻訳されます これはどうやって知ったのか・・・英語の勉強と同じで、「乱数」の項目を辞書を引いて調べます プログラムには専用の関数リファレンスと呼ばれる、何かをするための記述方法が集約された本があります 有名なプログラムならネット上で調べることもできますが、ネットが使えない場所でプログラムを書く場合はやはり本は一番頼りになります
では、乱数の項目には何が書かれているのか
基本の random() は、0から1の間の小数を生成します 古いプログラムでは実はこれ一つきりで自由に乱数を作るには計算式を足してやる必要がありました
例えば 0から9の整数を作るには、
小数切り捨て (乱数 x 10)
BASIC風に書くと、INT(RND(10))
これを直接 Python に訳すと int(10 * random.random())
と、なりますが、カッコが多すぎてわかりにくい、よく使うので簡単に書ける方法はないのかという声に答えて
randrange(10)
このような書式を用意したようです また、random.uniform(a,b) のような aからbの間の小数を生成する便利な関数もあります しかし、最初はたくさんの関数の暗記するより基本をひとつかふたつだけ押さえておけばいいと思います
前回のプログラムには
math.sqrt() 数値の平方根を計算する
print() 画面に表示する
という、あと2つの関数が登場しますが、関数()はカッコの中のものを関数に従って処理するという意味ではすべて同じです
randomはrandomという道具箱に、sqrtはmathという道具箱に入っているので、random.random や math.sqrt という書き方になります では、printはどうでしょう
いくつかの関数は標準装備で道具箱を指定しなくても、最初からプログラム上使えるようになっています プログラムの種類によりますが、標準とされる範囲がとても広く道具箱を探さなくてもほとんどの関数が入った道具箱が最初から用意されている場合もあり、ほとんど何も入っていない道具箱しかないものもあります
例として、C言語では print関数 も道具箱には入ってなく、Rubyでは random関数も最初から道具箱に入っています この違いを簡単な例えに直すと、
- C言語: 広くて何もない部屋を用意して、何でも自由に部屋に持ち込めるように作られた作業場
- Ruby: たくさんの道具を棚に常駐して、道具箱を探しに行く手間を省いた作業場
このように言い換えることができるでしょう 昔のコンピュータは特に使えるメモリが限られていたし、一度書いたプログラムを他の機種でも使いたいという要望が多かったので、C言語のようなスタイルが好まれました Python はちょうどこの間だと思います
関数は覚えるまで辞書で引かなければいけませんが、一度覚えてしまえば後々ずっと使えます また、言語を変えても関数の機能は同じものが多く、名前や書式がちょっと違うだけで基本は同じなので覚えると財産になります
次回は、この整数の乱数をつくる関数を使って「数あてゲーム」を書いてみようと思います
Comments
Post a Comment