大規模なプログラムを作るときは,想定しない入力が来た時に,どのような挙動をするかも含めて関数の設計をする必要がありますが,この講義の範囲では「どのようなエラーを出すように関数を設計するか」などは扱っていないので,どんな挙動をしても(プログラムが止まらない等)問題ありません.
def sndmax(xs): if xs[0] > xs[1]: m = xs[0] s = xs[1] else: m = xs[1] s = xs[0] for i in range(2, len(xs)): if xs[i] > m: s = m m = xs[i] elif xs[i] > s: s = xs[i] return sなお,
s = m m = xs[i]の行を
m = xs[i] s = mとすると,xs[i]の値がm にもs の両方に代入されてしまい,目的を果たさないことに注意が必要です.なお,
s, m = m, xs[i]のように書くことも可能です.
Pythonの配列(リスト)では以下のように remove を使って,指定した値を検索し,最初の値を削除することができます.
IN [1]: x = [3, 4, 5, 4] x.remove(4) x OUT[1]: [3, 5, 4]これを使って以下のような回答をした人もいました.
def sndmax(xs): xs.remove(maximum(xs)) return maximum(xs)これは,
sndmax([1, -10, 4, 8, 2, 0]) -> 4 sndmax([5, 3]) -> 3 sndmax([10]) -> IndexErrorと与えられた入力に対しては正解を返すので,解答としては問題ないのですが,
IN [1]: xs = [1, -10, 4, 8, 2, 0] sndmax(xs) OUT[1]: 4 IN [2]: xs OUT[2]: [1, -10, 4, 2, 0]のように,引数として与えた配列を書き換えてしまうので,おすすめはできません.
mkdir ~/algo18のようにします.そして,ターミナルを開くたびに
cd ~/algo18 jupyter notebookと入力してJupyter Notebookを動かしてください.詳しくは,はいぱーワークブック「14.4 コマンドを使ったファイル操作」を参照してください.
cd ~/algo18を済ませてから,
python vote.py 選択肢番号のように使います.
Jupyter Notebookを使いながら(一旦終了せずに),投票システムも使うには,ターミナルのメニューバーの「シェル」->「新規タブ」を選ぶか,[Command]+[T]で別のタブを開いて(あるいは[Command]+[N]で別のウィンドウを開いて),投票システムを使うことをお勧めします.このあたりのことは,「はいぱーワークブック」の15.4 ターミナルの便利な使い方に書いてあるので参考にしてください.
cd ~/algo18と入力してください.これらの機能を使うと,Jupyter Notebookを抜けずにvoteできます.
ターミナルの基本的な使い方は,はいぱーワークブックの15.2 ターミナルの基本的な使い方を,より高度な使い方は,15.4 ターミナルの便利な使い方を参照してください.
cdというコマンドと「~」の意味は,はいぱーワークブックの14.4 コマンドを使ったファイル操作の14.4.1 ディレクトリを読むと分かります.