はじめに
前稿では簡単な数値計算とグラフの出力方法について述べました。前稿のプログラムをみてみましょう。
import math, pylab #①
steps = 200 #②
dtheta = 0.1
theta = [0.0]*steps #③
cos = [0.0]*steps
for i in range(steps): #④
theta[i] = i*dtheta
cos[i] = math.cos(theta[i])
print(theta) #⑤
print(cos)
pylab.plot(theta, cos) #⑥
pylab.show()
今回はこれにもう少しだけ手を加えて、陳腐なものから抜け出したいと思います。
プログラムの改良
前稿のプログラムでは、定義域と分割数を変数stepsおよびdthetaから決定しました。これらはあらかじめプログラム内に書き込まれています。そのため定義域や分割数を変えようと思ったときにわざわざプログラムを書き換えなければなりません。これはなかなか手間のかかる作業です。ここではこの手間を避けるために、コマンドプロンプトでプログラムを実行することで標準入力から値を代入することができるようなプログラムを書きたいと思います。標準入力から値をいろいろと変えることができるようになれば、プログラム内の変数を何度も変えて計算結果を次々に知ることが容易になります。標準入力とはコマンドプロンプトに値を入力することを言います。実際に書き換えてみましょう。
import math, pylab
#①
steps = int(input('Enter number of steps ===>>'))
dtheta = float(input('Enter step size [rad] ===>>'))
#②
theta = [i*dtheta for i in range(steps)]
cos = [math.cos(x) for x in theta]
pylab.plot(theta, cos)
pylab.show()
書き換えた点は2ヶ所あります。一つはcos.pyの②にあたる部分をcos2.pyの①に、そしてもう一つはcospyの③と④にあたる部分をcos2.pyの②に書き換えました。
今回の目的はcos2.pyの①にあります。標準入力から数値を入力するには標準モジュールにあるinput関数を用います。標準モジュールとはPythonに元からインストールされているモジュールだと思ってください。input関数が使われているプログラムを実行すると、input関数が呼び出された時点でユーザーの入力を待ち、入力があったら直ちにその値を格納して次のプロセスに移ります。input関数内には文字列を書き込むこともできます。cos2.pyではstepsにint型で数字を格納します。また、dthetaにはfloat型で数字を格納します。そのために型変換を行っています。そのままだとstr型になるはずです。
次にcos2.pyの②について述べます。cos.pyの③ではリストをsteps分だけ作成します。そのあとcos.pyの④でfor文の繰り返しを用いて各計算値を角度リストとcos関数リストに格納します。これより角度リストに対するcos関数リストをプロットしてグラフが出来上がります。一方cos2.pyの②では内包表記という方法を用いています。この内包表記を使うことでcos.pyの③と④のプロセスと一行にまとめることができます。内包表記はfor文が短い場合に有効な手段ですが、for文が長い場合には可読性などの理由から内包表記の利用を避けるべきです。
# 最後に
最後になりますが、プログラムを実行してみてください。コマンドプロンプトやみなさんがお使いの開発環境にinput関数内に書き込んだ文字列が表示されると思います。そこに200を入れてEnterを押してください。次に0.1を入れてEnterを押すと、グラフが出力されるはずです。Part2で出力した結果と同じであることが確認できるでしょう。これが済んだら、適当な数字を代入してみてください。定義域を広げてみたり、分割数を少なくしてみて遊んでみると面白いと思います。