!pip install ita -U --userのように「-U」オプション付きでライブラリitaをインストールするコードが書かれていましたが,これを大学の教育用計算機システム上で実行するとおかしくなることがあるようです.現在は,
!pip install ita --userのように「-U」オプションなしのものを配布しています.もう一度Notebookをダウンロードし直して新しいファイルを使ってください.これを実行しようとしても,
AttributeError: '_NamespacePath' object has no attribute 'sort'というエラーが出る時は,ターミナルで
rm -rf ~/.localを一度実行すると回復するようです.
def ex8_8(n): s = 0 for i in range(0, n): v = 0 # random.randrange(1, 7) を5回呼び出してvに足し込む繰り返し for j in range(0, 5): v = v + random.randrange(1, 7) if v <= 20: # 合計値vが20以下なら s = s + 1 return s / n5回ならば繰り返しを使わなくても良いと判断して,以下のように回答した人も多かった.
def ex8_8(n): s = 0 for i in range(0, n): v = v + random.randrange(1, 7) + random.randrange(1, 7) + random.randrange(1, 7) + random.randrange(1, 7) + random.randrange(1, 7) if v <= 20: # 合計値vが20以下なら s = s + 1 return s / nなお,以下のように ex8_8 が文字列を返すプログラムを書いているひともいた.ex8_8の返す値は数(数値)であることが想定されているので,excheckは通らない.
def ex8_8(n): res=0 for i in range(0,n): sum=0 for j in range(5): sum+=random.randrange(1,7) if(sum<=20): res+=1 return '{:.10f}'.format(res/n)また,モンテカルロ法を使わずに確率を正確に計算して回答した人もいた.
def ex8_8(n): D = 6 L = 20 N = 5 a = [1] for i in range(N): b = [0] * (len(a) + D) for j in range(len(a)): for k in range(D): b[j+k+1] += a[j] a = b bunsi = 0 bunbo = 0 for i in range(len(a)): if i <= L: bunsi += a[i] bunbo += a[i] return bunsi / bunboこれは,「n個のサイコロを振って合計がmになる確率」を表にして漸化式にしたがって埋めていく方法でおこなっている(教科書の組合せ数のプログラムのように表を2次元配列で持つのではなく,行ごとの1次元配列で持っているのでメモリ使用量は少ないが,わかりにくいかもしれない).6面サイコロが5個ならば 65回の繰り返しでも問題はない.
他には,numpyライブラリを使って以下のように回答した人もいた(関数名のみ変更).
import numpy as np def ex8_8(n): dice = np.random.randint(1,7,(n,5)) trial_sum = dice.sum(axis=1) for i in range(0,n): if (trial_sum[i] <= 20): trial_sum[i] = 1 else: trial_sum[i] = 0 return (trial_sum.sum() / n)効率的な Python プログラムを作成するには,numpy ライブラリでできることはなるべくその範囲でおこなうのがお勧め.以下のように書くことも可能(講義の範囲を超えるので説明は省略する).
import numpy as np def ex8_8(n): return np.count_nonzero(np.random.randint(1, 7, (n, 5)).sum(axis=1) <= 20) / n
mkdir ~/algo19のようにします.そして,ターミナルを開くたびに
cd ~/algo19 jupyter notebookと入力してJupyter Notebookを動かしてください.詳しくは,はいぱーワークブック「14.4 コマンドを使ったファイル操作」を参照してください.
cd ~/algo19を済ませてから,
python vote.py 選択肢番号のように使います.
Jupyter Notebookを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」の15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.
cd ~/algo19と入力してください.これらの機能を使うと,Jupyter Notebookを抜けずにvoteできます.
ターミナルの基本的な使い方は,はいぱーワークブックの15.2 ターミナルの基本的な使い方を,より高度な使い方は,15.4 ターミナルの便利な使い方を参照してください.
cdというコマンドと「~」の意味は,はいぱーワークブックの14.4 コマンドを使ったファイル操作の14.4.1 ディレクトリを読むと分かります.