アルファベットの小文字を乱数により発生させますが,a から z までのすべての文字が出たら終わりとします.関数を使用したプログラムを作成しましょう.
Alphabets including all 26 letters: ppfancmlrnffcsszffvkrhmlggfeykwywzuksoqpngfpiu guwdfrwdthiyxxwzboisfalgglohpaj |
26文字のそれぞれが出たかどうかを判断するフラグを要素として持つリストを作っておいて,それをチェックする部分を関数にしてみましょう.
今回も再帰について,一応復習しておきましょう.微積分や専門の授業で,これまでに何度か MacLaurin 展開を扱ってきたと思います.どんな形の関数であっても,それが微分可能であれば級数展開して近似値を求めることができることを学習したと思います.
MacLaurin 展開を指数関数 ex について行うと,以下の式で表されます.
そこで,2から5の範囲の整数を乱数により1個発生させ,それを x とするとき,MacLaurin 展開で x10 の項まで逐次求めて,実際の exp() 関数の値にどのくらい近づいていくのかを確認するプログラムを再帰を用いて作成しましょう.
exp(5) 0 : 1 1 : 6.0 2 : 18.5 3 : 39.33333333333333 4 : 65.375 5 : 91.41666666666667 6 : 113.11805555555556 7 : 128.61904761904762 8 : 138.30716765873015 9 : 143.68945656966488 10 : 146.38060102513225 Real value from math.exp(x): 148.4131591025766 |
何度も言いますが,再帰は漸化式 a(n) = f(a(n-1)) の形で作ります.また,階乗計算も再帰の関数を使いましょう.
今度は三角関数の sin x についてのプログラムを作ってみましょう.以下の展開式を参考に,x9 まで逐次計算して,実際の math.sin(x) と比較します.x の値は1以上3未満の実数の乱数を用いることにします.
sin(1.3407550082023894) 1 : 1.3407550082023894 3 : 0.9390594465081721 5 : 0.9751643254676416 7 : 0.9736190160236771 9 : 0.9736575977643932 Real value from math.sin(x): 0.9736569744638475 |
+ と - の係数が交互に出てくるところがポイントです.解答例では再帰に使用するのは連続する整数にして,関数内で 2n+1 にして奇数のべきにしています.
2桁の正の整数を乱数により20個発生させて表示した後,偶数の要素だけを表示するプログラムを作成しましょう.ただし,このプログラムでは内包表記を含めて反復処理を一切使用しないこととします.
47 74 36 66 85 11 70 85 75 17 54 41 63 73 93 99 68 62 87 82 74 36 66 70 54 68 62 82 |
リストの作成には map 関数を,偶数だけの選別には filter 関数を使用します.
Python には statistics モジュールが用意されていて,各種の統計量の計算も簡単にできますが,ここではあえて手作業で代表的な統計量である,平均値,不偏分散,標準偏差を求めてみましょう.それらの値は以下のように計算されます.
1から100の範囲の整数を乱数により20個発生させ,以下のように統計量を表示するプログラムを作ります.ラムダ式と map 関数を使用して残差平方和を求めることで,反復処理なしで計算するプログラムにしましょう.
Data: 30 57 30 2 61 1 28 8 22 3 67 96 33 59 31 40 24 60 80 39 Mean: 38.5 Squared sum: 13327.0 Variance: 701.4 Standard deviation: 26.5 |
math モジュールをインポートすると平方根の計算は sqrt 関数でできます.また,statistics モジュールをインポートすることで,variance 関数と stdev 関数により値が合っているかどうかの確認もできます.