Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Python勉強会4-制御構文とパッケージ

158 views

Published on

研究室でPythonの勉強会を行った時の資料です

Published in: Technology
  • Login to see the comments

  • Be the first to like this

Python勉強会4-制御構文とパッケージ

  1. 1. Python演習 4. 制御構文とパッケージ
  2. 2. 前回の復習―リスト • リスト • Fortranの配列に似た概念 • サイズが後から変えられる • list = [1, 2, 3, 4, 5]のようなもの • リストの参照 • list[i]で要素の参照、list[i]=xで要素の代入 • しかし、実際にはリストの要素を順に参照したい • →ループと同時に使うことがとても多い • 今回:ループなどの制御構文
  3. 3. if文 • 条件分岐 • if cond1:で条件分岐を表す • cond1が偽のときの条件はelif cond2:で表す • ifやelif以外の場合はelse:で表す • ifやelseの次の行(ブロック)はインデントが必要 • ブロックで何もしないときはpassと書く • 例 if light == 'Green': # lightが'Green'ならば pass # 何もしない elif light == 'Yellow': # lightが'Yellow'ならば print('Be Careful') # Be Carefulと表示 else: # どれでもなければ print('Stop') # Stopと表示
  4. 4. 比較演算子など • 比較演算子 == 等しい != 等しくない < 小さい > 大きい <= 以下 >= 以上 in 含まれる not in 含まれない • 「真」と「偽」 True 真 False 偽 • 「かつ」と「または」と「not」 A and B AかつB A or B AまたはB not A Aでない
  5. 5. TrueとFalse • TrueとFalse • ifや後述のwhileの判定条件に使う • 例えば1 == 1はTrue、1==3はFalse • 「値」なので変数に代入できる(例: x = (1 == 1)) • 実は全ての値(数字等も)はTrueかFalseにみなせる • Falseとみなされるもの • False、None、0、0.0、''(空文字列)、[](空リスト)、 (,)(空タプル)、{}(空辞書)、Set()(空集合) • Trueとみなされるもの • Falseとみなされるもの以外のほぼすべて • "0"、"False"、[[]]、"¥n"(改行)などもTrue
  6. 6. while文 • while文 • while cond:でループを表す • 実用上は後述のforが重要で、あまり使わない • ループの先頭に移動するにはcontinueを使う • ループを脱出するときはbreakを使う • while True: で無限ループになる • 例(1から10までを表示) i = 1 # 初期値は1 while i <= 10: # iが10以下の間 print(i) # iを表示 i += 1 # iを1増やす
  7. 7. for文 • for文 • リストやファイルについて反復 • breakとcontinueはwhileと同じ • 例 for i in [0, 1, 2]: # [0, 1, 2]はリスト print(i) # 0 1 2を合計3行で表示 for l in sys.stdin: # 標準入力の各行について print(l.rstrip()) # 改行を削除して表示 for y in [x * x for x in range(5)]:# リスト内包表記 print(y) # y(xの2乗)を表示
  8. 8. イテレータ、特にrange • イテレータ • 「次」が定義されたもの • リスト→次の要素、ファイル→次の行、… • range() • 整数が出てくるイテレータ • range(5) # [0, 1, 2, 3, 4](のようなもの) • range(0, 5) # [0, 1, 2, 3, 4](のようなもの) • range(0, 5, 2) # [0, 2, 4](のようなもの) • for文―イテレータの用途 • for文のinの後ろは正確にはイテレータが来る for i in range(5): # ループの範囲として使う print(i) # 0,1,2,3,4を一行づつ表示
  9. 9. 発展―例外構文 • 例外(構文は下記を参照) • エラーの一種 • Fortranではreadのiostatのようなもの • try:内で例外が発生すると処理がcatchに移る • 例外にはStopIteration、IndexError等がある • catchはErrorで指定した指定した例外を補足する • catchされないとプログラムが停止する • 構文 try: 何らかの処理 catch Error: 例外処理
  10. 10. 演習10―FizzBuzz (file) • FizzBuzz問題 • 1から40まで以下の条件に従って表示します • 3の倍数のときはFizz • 5の倍数のときはBuzz • 3かつ5の倍数のときはFizzBuzz • それ以外は数自体 • 実行結果(実際には1つずつ改行して下さい) 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz
  11. 11. 関数 • 関数 • プログラムの小さな単位の切り出し • サブルーチンも(返り値なしの)関数として表現 • def func(argv):で定義、func(argv)で呼び出し • 定義(例) • def tashizan(a, b): # 関数を作る • return a + b # 関数の返り値はa+b • 呼び出し(例) • sum = tashizan(1, 2) # 関数を使って計算 • print(sum) # => 3
  12. 12. 関数―変数のスコープ • スコープ • 変数が見える範囲 • 百聞は一見にしかず • というわけで、例。 x = 1 # xをグローバルスコープで定義 def f(): # 関数fを定義(同時にスコープを設定) y = 2 # yをfのスコープで定義 print(x) # xは関数の中からでも見える f() # fを実行(print(x)は実行できる) print(y) # yを表示…できない(スコープ外)
  13. 13. 関数―変数の巻き上げ • 変数の巻き上げ(hoisting) • 変数の宣言が関数の初めに移動すること • 百聞は一見にしかず • というわけで、例。 x = 1 # xをグローバルスコープで定義 def f(): # 関数fを定義(同時にスコープを設定) print(x) # xを表示したいのだが? x = 2 # xをfのスコープで定義 f() # fを実行(なんとxが未定義!!) • 理由 • f()の中でxを使った(printの後にもかかわらず) →fのスコープでは新しいxが作られた
  14. 14. 演習11―指数関数 (file) • 指数関数 • テーラー展開: 𝑒 𝑥 = 1 + 1 1! 𝑥 + 1 2! 𝑥2 + ⋯ • 問題 • 上記に基づいてexp(x)=𝑒 𝑥を定義して下さい • exp(1.0)を求めて下さい • math.exp(1.0)と比較して下さい • 出力結果 exp 2.7182818284590455 math.exp 2.718281828459045
  15. 15. モジュール • ライブラリのimport • import moduleでライブラリを読み込む • ライブラリの関数はmodule.func(argv)で呼べる • 例 • import math • print(math.sqrt(2.0)) # => 1.4142135623730951 • 重要なライブラリ(※個人の感想です) • re (正規表現) • sys (シェル関連) • math (数学関数)
  16. 16. 外部モジュール • 外部モジュール • Pythonでデフォルトでは使えないモジュール • pip3 install パッケージ名 --userでインストール • 研究室で使えるモジュール • numpy (数値計算) • scipy (数値計算) • matplotlib (グラフ作成) • ライブラリは組み込み、外部モジュールともに たくさんあるので調べてみよう。
  17. 17. オブジェクト • オブジェクト • オブジェクト=データ+関数(メソッド) • リスト、タプルなどはオブジェクト • リストの場合 • データ=各要素 • list.append(x) # listにxを追加 • list.extend(x) # listにxを展開して追加 • list.pop(i) # listからi番目の要素を削除し返す • クラス • オブジェクトの「型」 • リストの場合「リスト」という概念がクラス • 配列1つ1つがオブジェクト
  18. 18. 発展―クラスの作り方 • クラスの作り方 • class Klass(ancestors):でクラスを作る • ancestorsを指定すると「継承」ができる • プロパティとメソッドの定義 • def method(self, args):でメソッドが定義できる • selfにはオブジェクト自身が代入される • self.propertyでプロパティが定義・参照できる • オブジェクトの作り方 • class Klass(): …でクラスを作る • obj = Klass()でKlass型のオブジェクトができる • __init__(self, args)メソッドがあれば実行される • obj.methodでメソッドを呼び出す
  19. 19. 発展―クラスの作り方・例 • 例(ベクトル): class Vector(): def __init__(self, x, y): self.x, self.y = x, y def add(self, another): return Vector(self.x+another.x, self.y+another.y) def sub(self, another): return Vector(self.x-another.x, self.y-another.y) def __str__(self): return "(" + str(self.x) + ", " + str(self.y) + ")" u, v = Vector(1, 2), Vector(3, 4) print(u.add(v), u.sub(v))
  20. 20. 発展―クラスの情報を得る • help(obj) • objの属するクラスについてヘルプを読む • objがクラスそのものだった場合そのヘルプを読む • 例: help(1) # intクラスのヘルプを読む • 例: help(str) # strクラスのヘルプを読む • dir(obj) • objの属するクラスのメソッドを調べる • objがクラスそのものの場合そのメソッドを調べる • 例: dir(1) # intのメソッドを調べる • 例: dir(str) # strのメソッドを調べる • この資料を作るときにかなり使いました。
  21. 21. 発展―特殊メソッド • 特殊メソッド • 構文や演算子、関数の裏側で使われるメソッド • a+bはa.__add__(b)に読み替えられる、など • 1+3が4で'1'+'3'が'13'の理由 • intの__add__は整数の加法を返す • strの__add__は連結した文字列を返す • 特殊メソッドの例 a + b a.__add__(b) クラスの作成 x.__init__() a == b a.__eq__(b) for x in iter: iter.__next__() str(x) x.__str__() x in s (for以外) s.__contains__(x) len(s) s.__len__() ifの条件 x.__bool__() x[i] x.__getitem__(i) print(x) x.__str__() x[i] = v x.__setitem__(i, v) 関数呼び出し f.__call__(args)
  22. 22. 演習12―残基 (file) • collections.Counter • リストなどを項目ごとに集計するクラス • 使うにはcollectionsをimportした後、 • cnt = collections.Counter(list)とする • dict(cnt.items())で集計後の辞書が手に入る • 問題 • 次のページに示す化合物名に含まれる原子団を 種類ごとに数えて下さい • -ylで区切ると原子団名(の形容詞形)になります • 末尾のserineはserylにしなくて構いません • ヒント • ylで分割: 'yl'を'yl-'に置換→str.split('-')
  23. 23. 演習12―化合物名 Acetylseryltyrosylserylisoleucylthreonylserylprolylserylglutaminylphe nylalanylvalylphenylalanylleucylserylserylvalyltryptophylalanylasparty lprolylisoleucylglutamylleucylleucylasparaginylvalylcysteinylthreonyls erylserylleucylglycylasparaginylglutaminylphenylalanylglutaminylthre onylglutaminylglutaminylalanylarginylthreonylthreonylglutaminylvaly lglutaminylglutaminylphenylalanylserylglutaminylvalyltryptophyllysyl prolylphenylalanylprolylglutaminylserylthreonylvalylarginylphenylala nylprolylglycylaspartylvalyltyrosyllysylvalyltyrosylarginyltyrosylaspara ginylalanylvalylleucylaspartylprolylleucylisoleucylthreonylalanylleucyl leucylglycylthreonylphenylalanylaspartylthreonylarginylasparaginylar ginylisoleucylisoleucylglutamylvalylglutamylasparaginylglutaminylglu taminylserylprolylthreonylthreonylalanylglutamylthreonylleucylaspar tylalanylthreonylarginylarginylvalylaspartylaspartylalanylthreonylvalyl alanylisoleucylarginylserylalanylasparaginylisoleucylasparaginylleucyl valylasparaginylglutamylleucylvalylarginylglycylthreonylglycylleucylty rosylasparaginylglutaminylasparaginylthreonylphenylalanylglutamyls erylmethionylserylglycylleucylvalyltryptophylthreonylserylalanylproly lalanylserine Dahlemense株のカプシドタンパク質 (https://ja.wikipedia.org/wiki/タバコモザイクウイルス)

×