#author("2017-09-24T13:20:57+09:00","default:takataka","takataka") #author("2017-09-24T13:21:09+09:00","default:takataka","takataka") *SJS2017 ex01 [#f69bd8f1] 課題いっぱいありますが,1回で全部終わらせようという意図ではありません. 自分で進められるひとはどんどん先へ進めたらよいですが. #contents **準備 [#kbc5dcd1] 当日説明します. + python, ipython がインストールできてることの確認 + port select できてることの確認 + pyXY-readline のインストール **課題A [#w83b99ab] はじめての Python ***課題A-1 [#o75090ef] 端末上で $ python として python を実行し,次の内容を1行ずつ入力して動作を確認しなさい. 確認できたら,何が起こっているのかを高橋に説明しなさい. #pre{{ L = [ 1, 2, 3, 4.56, 'a', 'Hoge', [ 10, 20, 30 ], 999 ] print( 'L = ', L ) nL = len(L) print( 'L has', nL, 'items' ) print( range( nL ) ) print() print( '#####' ) for i in range( nL ): print( i, L[i] ) print() print( '#####' ) for item in L: print( item ) }} ***課題A-2 [#r4d0a0a9] 上記の内容を emacs 等のエディタで適当な名前のファイル(慣習的に拡張子を .py とすることが多いのでそれに習おう)に保存し,次のようにして実行できることを確認しなさい. $ python hoge.py %%ソースファイル中でUTF8で日本語等を入れたい場合,ソースの先頭行に次のように書きましょう.%% Python3 はデフォルトで UTF8 なので,以下は不要. # -*- coding: utf-8 -*- ***課題A-3 [#a60e0709] 次のようにして IPython を起動し,その上で上記を実行してみよう. $ ipython In [1]: %run hoge.py : (プログラムの出力) In [2]: print( L[5], L[-1] ) 上記からわかるように,hoge.py の実行が終わっても ipython 上では変数などがそのまま生きている.python コマンドを -i という引数付きで実行しても同様のことができるが,ipython の方がいろいろと便利なので,この授業では ipython を前提とします. **課題B [#s1784ef6] リスト ***課題B-1 [#qa8f9b5f] 課題Aのプログラムを実行し,それに続けて ipython 上で次ように実行しなさい.これは,リストのスライスという機能です. print( L[1:4] ) print( L[:4] ) print( L[4:] ) print( L[::2] ) # コロン(:)2つ print( L[-3:] ) print( L[::-1] ) x:y:z の x, y, z の意味をよく考えよう. ***課題B-2 [#za01e4b2] 以下を順に実行しよう.途中で随時 x の内容を print しながらすすめること. x = L[:4] x[1] = -2 max( x ) min( x ) x.sort() max や min は組み込み関数,sort はリストオブジェクトに作用するメソッド. ***課題B-3 [#mdb8b978] Pythonの本などを参考に,リストを受け取る組み込み関数やリストオブジェクトに作用するメソッドとして他のものを探して,動作を確認しなさい. **課題C [#m4a41257] 辞書(ディクショナリ) ***課題C-1 [#le9470f6] Python の辞書について本などで調べ,課題A,Bのような例を適当に自分で作って勉強しなさい. ***課題C-2 [#a160b3a6] + 郵便番号(文字列として扱おう)をキーとし,住所を値とする辞書を適当に作成しなさい.プログラム中に直接書いておいたらよい. + その辞書が d という変数で表されているとする.このとき, d[ '012-3456' ] のように打って何が出てくるか確認しなさい.辞書中に存在する番号,存在しない番号両方試すこと. + in という演算子を使うと,辞書の中に与えられたキーをもつエントリがあるかどうかを True/False で教えてくれる.これを利用して,次のようなプログラムを書いていろいろ試しなさい. #pre{{ d = 辞書の定義 key = 適当に代入 if key in d: print( d[key] ) else: print( '見つからへん' ) }} **課題D [#x53ee412] テキストファイルの読み込み. TLAB の GoogleDrive の sjs2016 ディレクトリ内に zipdata と zipdata100 という2つのファイルがある.これを自分の手元に保存しなさい TLAB の GoogleDrive の sjs2017 ディレクトリ内に zipdata と zipdata100 という2つのファイルがある.これを自分の手元に保存しなさい ***課題D-1 [#ze7a126d] zipdata100 を開いて読み込み,1行ずつ表示するプログラムを作りなさい. ファイルオブジェクトに対する readlines メソッドは大きなプログラムを扱うのにいろいろ問題があるので,次のようにしたらよい. #pre{{ with open( ... ) as f: for line in f: print( line ) }} このまま実行すると,line の末尾に改行文字が入っているため,1行空きで表示されるだろう. ***課題D-2 [#a1cc1a8a] 上記の for ループの中を改良して, #pre{{ for line in f: : print( num, addr ) }} とすると,1行ごとに郵便番号と住所が出力されるようにしなさい. **課題E [#y4158fca] ファイル zipdata を読み込んで辞書に登録するプログラムを作りなさい.キーを指定して検索するのは,ipython 上で直接手入力で構わない. key = '0440451' print( d[key] ) 北海道虻田郡喜茂別町上尻別