2016/09/02 13:00- python [前回] python のデータ構造 List の復習 データ型 : 値の集合と、可能な操作の対 ( 操作と値に関しては、何らかの関係[論理的な]がある ) データで、現実の事象を表現する (対応する値を決める) データを操作する事によって現実の事象を操作(したかのようにエミュレーション)できる 現実の事象と、データ型が対応していれば、都合よくなる(プログラムが簡単になる) プログラミング : プログラム(=手続)を記述する その前(設計) : 問題を解くのに都合がよいデータ型を選ぶ なければ、都合の良いデータ型を作る ! 幸い、python のリストは、ほぼ、何にでも ! そのまま、あるいは、少し手を加えるだけで、 ! 色々できるデータ型になっている !! 事例 : Stack / Queue を作ってみせた 「プログラム = データ型 + アルゴズム」 List 復習の残り a=range(10) a=[0,1,2,3,4,5,6,7,8,9] a[0] -> 0 a[1] -> 1 a[i] -> i ( i = 0,..,9 ) len(a) -> 10 a[n:m] -> [ n, n+1, .., m-1 ] ( n < m ) 例 : a[3:7] -> [3,4,5,6] len(a[n:m]) -> m-n a[n:n+1] -> a[n] -> n a[:m] -> a[0:m] a[n:] -> a[n:len(a)] [前々回の復習の続き] 辞書: 内容的には、対のリストのような形 (表) 気持 : upper = [ ('a','A'), ('b','B'), ..., ('z','Z') ] upper('a') -> 'A' upper 入力 | 'a' | 'b' | .. | 'z' | key -----+-----+-----+-----+-----+ 出力 | 'A' | 'B' | .. | 'Z' | value 入力と出力の型は、自由にできます。 key の方は重複できない value 方は重複してもよい 表現 upper = { 'a':'A', 'b':'B', .., 'z':'Z' } ! 「表」は、有限集合を定義域とする関数の定義になる ! 「表」を引く作業は、関数の値の評価になっている ! 例 一桁の整数値 ( -9, -8, ..., -1, 0, 1, 2, .., 9 ) ! 上の二乗の関数 sq ! sq = { -9:81, -8:64, ..., -1:1, 0:0, 1:1, .. 9:81 } ! とすればよい リスト(の要素)もそうだが、辞書(の値)も、代入可能 mutable (ミュータブル) リストと、辞書の操作 両方共長さが固定でない 全ての要素を処理するには、繰返しが必要 for 文を利用する事により、「全ての要素を処理」できる for 変数 in リスト: <- 変数にリストの要素が入る 変数の値に何かする 例: a=[1,5,-2,7] for i in a: print i 辞書の場合は、基本 key (定義域)が欲しい keys 関数が、key のリストを作ってくれる for 変数 in 辞書.keys(): <- 変数に key 一つずつずつ入る 変数に key が入っているとして、処理する 例: for k in sq.keys(): print k, sq[k] <注意> keys() の返すリストの要素の順序 「不定」: どうゆう順序かは判らない これが嫌な場合、リストをソートする keys=sq.keys() <- キーのリストを作る keys.sort() <- そのリストをソート for k in keys: print k, sq[k] 有名な応用 : 単語の個数を数える cf. http://www.freia.jp/taka/blog/356/ リストの要素も、辞書の key も value も、 任意の値が使える。(汎用性が非常に高い) 単語のカウントの例では、文字列を key に利用している <前回> リストで、スタックや、キューを作った 一つモジュールが一つのデータ モジュール : 独立した単独の機能を実現したプログラムの一部 例 : C 言語の関数 データ構造の機能を実現するためには、 複数の手続と、共有する変数が必要 例 : Stack : List + push,pop,top 前回は、モジュールで、データ型(データの一つ)を表現 モジュール内で共有可能な変数が一つなので、 データも一つ class の定義の仕方 class クラス名: クラスのメンバー定義 == python のクラス定義 http://python.keicode.com/lang/oop-basics.php http://www.tohoho-web.com/python/class.html http://docs.python.jp/3/tutorial/classes.html http://www.yoheim.net/blog.php?q=20160405 http://yut.hatenablog.com/entry/20110120/1295533994 == [今日の目標] Ethernet だけで、3 port ある Leyer-2/3 CISCO Switch がある -> これで、ネットワークを作る 30 分程度で設定して欲しい <手順> 1. ネットワークの設計と、担当者(一人 1 台) ネットワークの設計 : トポロジィ/ Addressing 2. Serial Console ケーブルの問題がある 北野君が、すべての Switch に対して、 telnet 可能な Address を振る所までやる # あきたら、他人にふってもよい 3. ケーブリング 4. 個々に Switch の設定を行う 4.1 Host として、直接 Ping ができる ( 30 分以内 ) interface への IP Address の設定 4.2 Router として、どこからでも互いに ping が通る (Static な) Routing の設定 !! 今日の目標は 4.2 である !! 次回 : 4.1 後に、Dynamic Routing の設定する == CISCO 2800 VLAN を追加する方法 cf. http://www.cisco.com/c/en/us/support/docs/lan-switching/vlan/10023-3.html#createvlans3 a) VLAN を作る ( VLAN 1 は最初からある ) vlan database # VLAN 作成モードに移行 vlan 2 # VLAN 2 を作成する # 削除する場合は、no vlan 2 exit # VLAN 作成モードから抜ける b) VLAN に IP Address を割り当てる config t # config 開始 interface vlan 2 # i/f vlan 2 を選択 ip address 192.168.1.1 255.255.255.0 # ip address を設定 end # config 終了 c) Port を VLAN に所属させる config t # config 開始 interface FastEthernet0/1/0 # i/f 0/1/0 を選択 switchport access vlan 2 # vlan 2 に割当 これによって、port 0/1/0 から 192.168.1.1 に通信ができる == CISCO 2800 工場出荷状態にする方法 cf. http://tipstour.net/network/1491 0) minicom で繋っているいる事を確認 (password がわからなくても OK) 1) (電源 off -> ) 電源 on 色々メッセージが出力さる(結構余裕がある) 2) 1) の状態で、minicom から「ブレーク信号」を送る minicom の場合は、「Ctrl-A Z F」で送る 「rommon 1 >」と表示される 3) キーボードから、「confreg 0x2142 」とする 「rommon 2 >」と表示される 4) キーボードから、「reset 」とする CISCO が再起動して、(結構時間がかかる) [yes/no] と聞いてくる 「工場出荷状態」で起動する 5) キーボードから、「no 」とする [Return] を入れろと言われる 6) [Enter] login できる ( Router> と表示される ) 7) en enable mode になる 8) 「copy run start 」とする これで、現在の「状態=工場出荷状態」になる 9) 初期化後にコンフィギュレーションレジスタを元に戻す 1), 2) の後、「confreg 0x2102 」とする 4) とすると、再起動して初期状態になる