!pip install ita -U --userのように「-U」オプション付きでライブラリitaをインストールするコードが書かれていましたが,これを大学の教育用計算機システム上で実行するとおかしくなることがあるようです.現在は,
!pip install ita --userのように「-U」オプションなしのものを配布しています.もう一度Notebookをダウンロードし直して新しいファイルを使ってください.これを実行しようとしても,
AttributeError: '_NamespacePath' object has no attribute 'sort'というエラーが出る時は,ターミナルで
rm -rf ~/.localを一度実行すると回復するようです.
!pip install ita --user import itaのところを実行すると
You are using pip version 9.0.1, however version 19.3.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.というエラーが出ます.ここに書かれているように,
!pip install --upgrade pip'を実行してもエラーが出ます.また,アニメーション動作で問題が生じています.
You are using pip version 9.0.1, however version 19.3.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.はpipというソフトウェアが最新のものではないという,警告 (warning) でエラーではありません.教育用計算機システムではpipというコマンドはユーザのホームディレクトリではなく,システムの共有領域にインストールされているため,
!pip install --upgrade pipでpipをアップグレードしようとしても,権限がなくエラーが出てアップグレードできません.インターネットで調べて,pipをユーザ領域にインストールする
!pip install --upgrade pip --userを実行すると,itaで使っているmatplotlib とのバージョンの不整合がおきて,アニメーションがうまく働かなくなることがあるようです.前回の補足にある,
!pip install ita -U --userを実行したときと同じ症状です.このときは,ターミナルで
rm -rf ~/.localを一度実行すると回復するようです.
def ex6_1(n): i = n - 1 while n % i != 0: # n/iの余りがゼロであればそれは最大約数となる i = i - 1 return iwhileの条件を以下のようにしていた回答が多かったが,これでも正解.
def ex6_1(n): i = n - 1 while n % i > 0: i = i - 1 return iこの2種類の解答の違いが問題になるのは,iが負になって,
IN [1]: 7 % -2 OUT[1]: -1のように,剰余が負になったときに,whileの条件が「n % i > 0」ならば繰り返しを終了するが,「n % i != 0」だと終了しないケースだが,問題文に 「2以上の整数n」と書かれており,iが負になる前にiが1になったところで,繰り返しを終了するので影響はない.
def ex6_3(n): m = 0 while 2 ** m < n: #2のm乗がnより小さい間は m = m + 1 #mに1を加える return m対数を求める関数 math.log と切り上げをする関数 math.ceil を使って以下のように解答した人もいた.
def ex6_3(n): return math.ceil(math.log(n, 2))ただし,手元の環境では,
IN [1]: ex6_3(2**31) OUT[1]: 32となった.これは,
IN [1]: math.log(2**31, 2) OUT[1]: 31.000000000000004と微妙に誤差が入ったのが原因のようだ.2を底とする対数関数 math.log2 を用いて,
def ex6_3(n): return math.ceil(math.log2(n))とすると誤差は小さくなるようだ.math.log に誤差があっても動作するように,
def ex6_3(n): m = math.floor(math.log2(n)) while 2 ** m < n: #2のm乗がnより小さい間は m = m + 1 #mに1を加える return mとする案はある.
def ex6_5(f, deltax, a, b): r = 0 n = round((b - a) / deltax) #aからbまでをn等分 for i in range(0, n): #iが0からnまでの間 r += deltax * f(a + i * deltax) #x座標がa + i*deltaxであるときのfの値をrに足し続ける return rスライドにも書いたが,定積分の計算法としてはもっと良いものが多数存在する.2017年度までの教科書では,台形公式, シンプソンの公式 を使った定積分を扱っていた.
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 ディレクトリを読むと分かります.