Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pythonについて

53fba624930f3f43d1e6a5ad835ac1b9?s=47 ism67ch
November 19, 2016
280

 Pythonについて

53fba624930f3f43d1e6a5ad835ac1b9?s=128

ism67ch

November 19, 2016
Tweet

Transcript

  1. Pythonについて

  2. 〜本⽇の流れ(予定)〜 9:00 オープニング(ism67ch) 9:30 環境構築指南(擬⾳) 12:00 昼⾷@ココ! 13:00 Pythonについて(ism67ch) 14:00

    プログラミング演習(消⽕器) 17:00 クロージング(ism67ch)
  3. 〜⽬次〜 ・Pythonと他⾔語⽐較 ・なぜPythonなのか? Pythonを避けるべきとき ・Pythonの実⾏ ・変数、数値、⽂字列 ・リスト、タプル、辞書、集合 ・コード構造

  4. 〜Pythonと他⾔語⽐較〜 静的⾔語(C,C++,Java…) 動的⾔語(Python,Ruby,Perl…) ソース[変数、型] マシン語 コンパイル ソース[変数、(型)] ⼈間が苦労 コンピュータは楽 ⼈間が楽

    コンピュータは苦労 コンピュータが 直接理解する コンピュータが インタプリタを通して 理解する ソースが⻑くなる ソースが短くシンプル 実⾏時間が⾼速 実⾏時間が低速
  5. 〜Pythonと他⾔語⽐較〜 動的⾔語間の⽐較 とあるサイト調べ ここは正直 ライブラリの有無で決まる https://github.com/bakfoo/awesome-pysci

  6. 〜⽬次〜 ・Pythonと他⾔語⽐較 ・なぜPythonなのか? Pythonを避けるべきとき ・Pythonの実⾏ ・変数、数値、⽂字列 ・リスト、タプル、辞書、集合 ・コード構造

  7. 〜なぜPythonなのか〜 ・読みやすさ←書きやすいにつながる ・上達が早い ・⾏数が少なくて済む←⽣産性が増す ・⾃由かつ無料 ・どこでも実⾏できる ⼈々が “Pythonを気に⼊っている” から

  8. 〜Pythonを避けるべきとき〜 本当にスピードが求められるとき ・プログラムがほとんどの時間を 何らかの計算に使っている場合(CPUバウンド) ・Pythonの良いアルゴリズム > Cの悪いアルゴリズム となることもある → Pythonで開発スピードが上がれば,

    他の選択肢を試す時間が増える ・PythonのインタプリタはCで書かれているので、Cコードで拡張可能 ・Pythonのインタプリタは⾼速になってきている だけど…
  9. 〜⽬次〜 ・Pythonと他⾔語⽐較 ・なぜPythonなのか? Pythonを避けるべきとき ・Pythonの実⾏ ・変数、数値、⽂字列 ・リスト、タプル、辞書、集合 ・コード構造

  10. 〜Pythonの実⾏〜 Pythonの実⾏形式は2種類ある 対話型インタープリタ Pythonファイルからの実⾏ user$ python3 >>> print('Hello Python !')

    Hello Python ! >>> exit() user$ user$ python3 hello.py Hello Python ! user$
  11. 〜⽬次〜 ・Pythonと他⾔語⽐較 ・なぜPythonなのか? Pythonを避けるべきとき ・Pythonの実⾏ ・変数、数値、⽂字列 ・リスト、タプル、辞書、集合 ・コード構造

  12. 〜変数〜 数値や⽂字列などを格納しておく箱 user$ python3 >>> p_Y = ʻへびʼ >>> a1

    = 3.1415 へび p_Y 3.1415 a1 変数の名前には ・⼩⽂字の英字 ・⼤⽂字の英字 ・数字(先頭にはダメ) ・アンダースコア(_) が使える 変数名に使⽤禁⽌ False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise
  13. 〜変数〜 数値や⽂字列などを格納しておく中⾝が⾒える箱 → 箱には2種類ある、⼤きな違いは蓋が開くか否か へび p_Y 3.1415 a1 str型 float型

    3.1415 ⾒てコピー b1 ⾒てコピー へび nya
  14. 〜変数〜 数値や⽂字列などを格納しておく中⾝が⾒える箱 → 箱には2種類ある、⼤きな違いは蓋が開くか否か へび p_Y 3.1415 a1 str型 float型

    蓋が開く! 1.23456 a1 蓋が開かない! へび p_Y ʻPythonʼ 書き換えたい 書き換えたい ミュータブル イミュータブル
  15. 〜数値〜 数値 ・整数(int型) ・浮動⼩数点数(float型) ・ブール値(bool型) 算術演算⼦ ・ + : 加算

    ・ −:減算 ・ * :乗算 ・ / :floatの除算 ・ // :intの除算 ・ % :剰余 ・ ** :指数 - Python3では、long型がなくなり int型で任意のサイズ(64ビット以上も) が扱えるようになった。 例) -2016 、2000000000000000000000000000 例) -2.016 、200000000000000000.0 、10e8 例) True、False
  16. 少しイジってみましょう! 対話型インタープリタを起動してください!

  17. >>> a = 4 + 3 ‒ 2 ‒ 1

    + 6 - 5 >>> a 5 >>> a += 5 >>> a 10 >>> type(a) <class ʻintʼ> >>> a / 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: division by zero >>> a = a ** a >>> a 10000000000 ①int型で⾜し引きしてみよう ②変数aの型は? ③0で割ると? ④乗算してみる ⑤除算してみる >>> a = a / 3 >>> a 3333333333.3333335 >>> type(a) <class ʻfloatʼ> >>> a = 10000000000 >>> a = a // 3 >>> a 3333333333 >>> type(a) <class ʻintʼ>
  18. >>> googol = 10**100 >>> googol >>> googol * googol

    >>> f = 3.14 >>> type(f) <class ʻfloatʼ> >>> a = 2016 >>> type(a) <class ʻintʼ> >>> a = float(a) >>> a 2016.0 >>> type(a) <class ʼfloatʼ> >>> a = int(a) >>> a 2016 ⑥int型は任意のサイズおk? ⑦float型 ⑧int型をfloat型に直すには? ⑨float型をint型に直すには? ⑩int型とfloat型で演算すると? >>> a 2016 >>> f 3.14 >>> a // f 642.0 int型の除算でも、 int型をfloat型で割ると float型になる. → より融通が効く型に ⑪bool型をfloat型してみると? >>> type(True) <class ʻboolʼ> >>> True True >>> float(True) 1.0 整数オーバーフロー 起きない Q.
  19. 〜⽂字列〜 ⽂字列(str型) ・Python3からUnicode標準をサポート ・ʻ◦ʼ(シングルクゥオート),“◦”(ダブルクゥオート)で⽂字列を作る → クウォート⽂字を含む⽂字列を作りやすくする ・Pythonの⽂字列はイミュータブル(蓋が開かない箱) → ⽂字列をその場で書き換えることができない

  20. イジってstr型を理解しましょう!

  21. >>> str1 = ʻI have a “Pen”.\nI have a ”Apple”.\n”ApplePen”!ʼ

    >>> str1 ʻI have a “Pen”.\nI have a ”Apple”.\n”ApplePen”!ʼ >>> print(str1) I have a “Pen”. I have a ”Apple”. ”ApplePen”! ①複数⾏の⽂字列と表⽰ ②他の型をstr型に変換する >>> str(98.6) ʼ98.6ʼ >>> str(1.0e4) ʼ1000.0ʼ >>> str(True) ʼTrueʼ ③str型同⼠の連結 >>> ʻI have a ʼ + “Pen.” ʻI have a Pen. >>> a = ʻhop!ʼ >>> b = ʻstep!ʼ >>> c = ʻjump!ʼ >>> print(a,b,c) hop!step!jump!
  22. >>> a = ʻja ʼ >>> b = ʻja~n!ʼ >>>

    a *3 + b ʼja ja ja ja~n! ④*による繰り返し ⑤[ ]による⽂字の抽出 >>> letters = ʼabcdefghijkʼ >>> letters[0] ʻaʼ >>> len(letters) 11 >>> letters[10] ʻkʼ >>> letters[-1] ʻkʼ >>> letters[0] = ʻPʼ エラー ⑥[ start : end : step]によるスライス >>> letters[:] ʻabcdefghijkʼ >>> letters[4:] #4からendまで ʻefghijkʼ >>> letters[:4] #end⾃体は含まれない ʻabcdʼ >>> letters[4:6] #4からend-1まで ʻefʼ >>> letters[2:8:2] #2から7まで2つおきに ʻcegʼ >>> letters[::-1] #stepにマイナスをすると逆ステップ ʻljihgfedcbaʼ str型はイミュータブル Q.
  23. >>> poem = ʻkitcat cat cat catkitʼ >>> poem.startswith(ʻkitcatʼ) #kitcatから始まってるか?

    True >>> poem.endswith(ʻkatʼ) #末尾はkatで終わってるか? False >>> poem.count(ʻcatʼ) #catが何回出てくるか? 4 >>> poem.find(ʻcatʼ) #始めにcatがでてくる場所は? 3 >>> poem.rfind(ʻcatʼ) #最後にcatがでてくる場所は? 15 >>> poem.isalnum() #このpoemは全て英字か数字になっているか? False # 空欄があるので ⑦⽂字列検索
  24. >>> setup = ʻA duck goes into a bar...ʼ >>>

    setup.strip(ʻ.ʼ) # . を取り除こう ʻA duck goes into a barʼ >>> setup.capitalize() #先頭の⽂字だけ⼤⽂字に ʻA duck goes into a bar...ʼ >>> setup.title() #全ての単語の先頭⽂字を⼤⽂字に ʻA Duck Goes Into A Bar...ʼ >>> setup.upper() #全ての⽂字列を⼤⽂字に ʻA DUCK GOES INTO A BAR...ʼ >>> setup.lower() #全ての⽂字列を⼩⽂字に ʻa duck goes into a bar...ʼ >>> setup.swapcase() #⼤⽂字⼩⽂字を逆に ʻa DUCK GOES INTO A BAR...ʼ >>> setup.center(30) #⽂字列を30⽂字にして中央揃えに ʻ A duck goes into a bar... ʼ >>> setup.ljust(30) #⽂字列を30⽂字にして左揃えに ʻA duck goes into a bar... ʼ ⑧⼤⽂字と⼩⽂字の区別、配置
  25. >>> setup = ʻa duck goes into a bar...ʼ >>>

    setup.replace(ʻduckʼ, ʻmarmosetʼ) #1回だけ置換 ʼa marmoset goes into a bar...ʼ >>> setup.replace(ʻa ʼ, ʻa famous ʼ, 100) # 最⾼100回置換(スペースに注意) ʻa famous duck goes into a famous bar...ʼ >>> setup.replace(ʻaʼ, ʻa famousʼ, 100) ʻa famous duck goes into a famous ba famousr...ʼ ⑨replace()による置換 ʻaʼを置換すると 単語中のʻaʼも置換される Q.
  26. 〜⽬次〜 ・Pythonと他⾔語⽐較 ・なぜPythonなのか? Pythonを避けるべきとき ・Pythonの実⾏ ・変数、数値、⽂字列 ・リスト、タプル、辞書、集合 ・コード構造

  27. ʻPʼ ʻyʼ ʻtʼ ʻhʼ ʻoʼ ʻnʼ ʻ!ʼ 〜リスト〜 ・任意の要素からなるシーケンス、ミュータブル str

    ⽂字列:⽂字のシーケンス リスト:任意の要素からなるシーケンス 12 ʻyyʼTrue ʻhʼ 0.3 ʻPythonʼ ʻ!ʼ list 蓋開かない 蓋開く
  28. イジってリストを理解しましょう!

  29. >>> empty_list = [] >>> another_empty_list = list() >>> weekdays

    = [ʻMondayʼ, ʻTuesdayʼ, ʻWednesdayʼ, ʻThursdayʼ, ʻFridayʼ] >>> weekdays[1] # 扱うイメージはさっきの⽂字列のシーケンスと似てる ʻTuesdayʼ >>> weekdays[-1] ʻFridayʼ >>> weekdays[::2] #スライスも使える [ʻMondayʼ, ʻWednesdayʼ, ʻFridayʼ] ①リストを作ってみる ②⽂字列からリストへの変換 >>> list(ʻcatʼ) [ʻcʼ, ʻaʼ, ʻtʼ] >>> today = ʻ19/11/2016ʼ >>> today.split(ʻ/ʼ) # ʻ/ʼで分解してリストを作る [ʻ19ʼ, ʻ11ʼ, ʻ2016ʼ]
  30. >>> cyaron = [ʻchikaʼ, ʻyoʼ, ʻrubyʼ] >>> azalea = [ʻkananʼ,

    ʻdiaʼ, ʻhanamaruʼ] >>> guilty_kiss = [ʻrikoʼ, ʻyoshikoʼ, ʻmariʼ] >>> sunshine = [9, cyaron, azalea, guilty_kiss] >>> sunshine [9, [ʻchikaʼ, ʻyoʼ, ʻrubyʼ], [ʻkananʼ, ʻdiaʼ, ʻhanamaruʼ], [ʻrikoʼ, ʻyoshikoʼ, ʻmariʼ]] >>> sunshine[3] [ʻrikoʼ, ʻyoshikoʼ, ʻmariʼ] >>> sunshine[1][1] ʻyoʼ >>> sunshine[2][2] = ʻmaruʼ # ʻhanamaruʼ⻑いので書き換え >>> sunshine #リストはミュータブルだから書き換えられる [9, [ʻchikaʼ, ʻyoʼ, ʻrubyʼ], [ʻkananʼ, ʻdiaʼ, ʻmaruʼ], [ʻrikoʼ, ʻyoshikoʼ, ʻmariʼ]] ③リストのリスト
  31. >>> workday = [ʻMonʼ, ʻTueʼ, ʻWedʼ, ʻThuʼ, ʻFriʼ] >>> holiday

    = [ʻSatʼ, ʻSunʼ] >>> workday += holiday # workday.extend(holiday)でも同じ結果 >>> workday [ʻMonʼ, ʻTueʼ, ʻWedʼ, ʻThuʼ, ʻFriʼ, ʻSatʼ, ʻSunʼ] >>> workday.append(holiday) #リストがリストの要素として追加される [ʻMonʼ, ʻTueʼ, ʻWedʼ, ʻThuʼ, ʻFriʼ, ʻSatʼ, ʻSunʼ, [ʻSatʼ, ʻSunʼ]] ④リストの末尾への要素の追加 ⑤insert()によるオフセットを指定した要素の追加 >>> word = [ʻaʼ, ʻbʼ, ʻcʼ, ʻeʼ, ʻfʼ, ʻgʼ] >>> word.insert(3 , ʻdʼ) # ʻcʼと ʻeʼの間に ʻdʼを⼊れたい >>> word [ʻaʼ, ʻbʼ, ʻcʼ, ʻdʼ, ʻeʼ, ʻfʼ, ʻgʼ] >>> word.insert(10 . ʻhʼ) # 要素数以上のオフセットを指定すると… [ʻaʼ, ʻbʼ, ʻcʼ, ʻdʼ, ʻeʼ, ʻfʼ, ʻgʼ, ʻhʼ]
  32. >>> word [ʻaʼ, ʻbʼ, ʻcʼ, ʻdʼ, ʻeʼ, ʻfʼ, ʻgʼ, ʻhʼ]

    >>> del word[2] # ʻcʼを消したい >>> word [ʻaʼ, ʻbʼ, ʻdʼ, ʻeʼ, ʻfʼ, ʻgʼ, ʻhʼ] ⑥指定した要素の削除(オフセット指定) ⑦指定した要素の削除(キーワード指定) >>> word.remove(ʻhʼ) # ʻhʼを消したい >>> word [ʻaʼ, ʻbʼ, ʻdʼ, ʻeʼ, ʻfʼ, ʻgʼ] ⑧オフセットを指定して要素を取り出し、削除 >>> word.pop(3) ʻeʼ >>> word [ʻaʼ, ʻbʼ, ʻdʼ, ʻfʼ, ʻgʼ]
  33. >>> word [ʻaʼ, ʻbʼ, ʻdʼ, ʻfʼ, ʻgʼ] >>> word.index(ʻfʼ) #

    ʻfʼの要素のオフセットを知りたい 3 ⑨要素の値から要素のオフセットを知る ⑩値の有無のテスト >>> ʻdʼ in word # wordの中に ʻdʼがあるか True ⑪値の個数を知る >>> word.count(ʻcʼ) # wordの中に ʻcʼが何個あるか 0
  34. >>> rgb = [ʻredʼ, ʻgreenʼ, ʻblueʼ] >>> joined_rgb = ʻ

    * ʼ.join(rgb) # ʻ * ʼで要素を連結 >>> joined_rgb ʻred * green * blueʼ >>> separated_rgb = joined_rgb.split(ʻ * ʼ) # join()はsplit()の逆 >>> separated_rgb [ʻredʼ, ʻgreenʼ, ʻblueʼ] >>> rgb == separated_rgb True ⑫join()による⽂字列への変換
  35. >>> cyaron = [ ʻchikaʼ, ʻyoʼ, ʻrubyʼ ] >>> cyaron_sorted

    = sorted(cyaron) #sorted()はソートされたリストのコピー >>> cyaron_sorted [ ʻchikaʼ, ʻrikoʼ, ʻrubyʼ ] >>> cyaron.sort() #変数cyaron⾃体をソートしたい場合はsort() >>> cyaron [ ʻchikaʼ, ʻrikoʼ, ʻrubyʼ ] >>> numbers = [2, 1, 4.0, 3] >>> numbers.sort() >>> numbers [1, 2, 3, 4.0] >>> numbers.sort(reverse=True) #reverse=True引数を追加すれば降順になる [4.0, 3, 2, 1] ⑬要素の並べ替え 型が違う要素どうしでも 上⼿くソートしてくれる Q.
  36. >>> a = [1, 2, 3] >>> b = a

    >>> a[0] = ʻsurpriseʼ >>> a [ʻsurpriseʼ, 2, 3] >>> b [ʼsurpriseʼ, 2, 3] >>> b[2] = ʻWoWʼ >>> b [ʼsurpriseʼ, 2, ʻWoWʼ] >>> a [ʼsurpriseʼ, 2, ʻWoWʼ] ⑭=による代⼊とcopy()によるコピー >>> a = [1, 2, 3] >>> b = a.copy() #copy()を使う >>> c = list(a) #list()を使う >>> d = a[:] #リストスライス[:]を使う >>> b[0] = ʼnyanʼ >>> c[1] = ʻwanʼ >>> d[2] = ʻbaoʼ >>> a [1, 2, 3] 2 a 1 3 2 a/b 1 3 2 ʻsur priseʼ 3 a/b Q.
  37. 〜タプル〜 リスト:任意の要素からなるシーケンス 12 ʻyyʼTrue ʻhʼ 0.3 ʻPythonʼ ʻ!ʼ list 蓋開く

    タプル:任意の要素からなるシーケンス 12 ʻyyʼTrue ʻhʼ 0.3 ʻPythonʼ ʻ!ʼ list 蓋開かない
  38. イジってタプルを理解しましょう!

  39. >>> empty_tuple = () >>> cyaron = (ʻchikaʼ, ʻyoʼ, ʻrubyʼ)

    >>> cyaron (ʻchikaʼ, ʻyoʼ, ʻrikoʼ) ①タプルを作ってみる ②タプルを使って⼀度に複数の変数を代⼊ >>> a, b, c = (1, ʻabcʼ, True) >>> a 1 >>> b ʻabcʼ >>> c True ③リストからタプルを作る >>> cyaron = [ʻchikaʼ, ʻyoʼ, ʻrubyʼ] >>> tuple(cyaron) (ʻchikaʼ, ʻyoʼ, ʻrubyʼ) ・タプルは消費スペースが少ない ・タプルの要素は, 誤って書き間違えられる必要がない
  40. 〜辞書・集合〜 ・リスト・タプルの他にも,辞書・集合といったデータ構造もある ・今回は紹介だけしておきます 辞書 >>> dict = { … “day”:

    “A period of twenty-four hours, mostly misspent”, … “positive”: “Mistaken at the top of oneʼs voice”, … “misfortune”: “The kind of fortune that never misses” … } # キー : 値 集合 >>> multiple_two = {2, 4, 6, 8, 10, 12} >>> multiple_three = {3, 6, 9, 12, 15} >>> multiple_two & multiple_three {12, 6} 2 4 6 12 8 10 3 9 15
  41. 〜⽬次〜 ・Pythonと他⾔語⽐較 ・なぜPythonなのか? Pythonを避けるべきとき ・Pythonの実⾏ ・変数、数値、⽂字列 ・リスト、タプル、辞書、集合 ・コード構造

  42. 〜コード構造〜 if,elif,else,while,break,countinue,for,range, ここまで勉強したデータ構造を利⽤して, プログラム(コード)を織り上げていく。 if , elif, else を利⽤した例:colorに⼊れた⾊が既知なら野菜名,なきゃ知らん >>>

    color = “skyblue” >>> if color == “red”: … print(“Itʼs a tomato.”) … elif color == “green”: … print(“Itʼs a green pepper.”) … elif color == “yellow”: … print(”Itʼs a banana.”) … else: … print(“Sorry, I donʼt know.”) … Sorry, I donʼt know.
  43. 〜コード構造〜 while, break を利⽤した例 >>> count = 1 >>> while

    count <= 5: … print(count) … count += 1 … 1 2 3 4 5 >>> >>> while True: … stuff = input(“String to capitalize [q:quit]: ”) … if stuff == “q”: … break … print(stuff.capitalize()) … String to capitalize [q:quit]: test Test String to capitalize [q:quit]: hey Hey String to capitalize [q:quit]: q >>> countを1から+1しながらプリント 単語を⼊れると頭⽂字だけ⼤⽂字に、終わるときはq
  44. 〜コード構造〜 continue を利⽤した例:偶数が⼊⼒されたら何もしない,奇数が⼊⼒されたらべき乗 >>> while True: … value = input(“Integer,

    please [q:quit]: ”) … if value == ʻqʼ: # 終了 … break … number = int(value) … if number % 2 == 0: # 偶数 … continue … print(number, “squared is”, number*number) … Integer, please [q:quit]: 1 1 squared is 1 Integer, please [q:quit]: 2
  45. 〜コード構造〜 for を利⽤した例 >>> letter = [ʻkaʼ, ʻkiʼ, ʻkuʼ, ʻkeʼ,

    ʻkoʼ] >>> for a in letters: … print(a) … ka ki ku ke ko >>> リストの要素でfor⽂を回す ⽂字列でfor⽂を回す >>> word = ʻcatʼ >>> for a in word: … print(a) … c a t >>>
  46. 〜コード構造〜 for, range を利⽤した例 >>> for x in range(0,3): …

    print(x) … 0 1 2 rangeを使って0から2まで回す >>> for x in range(2,-1,-1): … print(x) … 2 1 0 2から0まで回す:renge(start,end,step)
  47. これでこの後の 問題演習にチャレンジ! 次は、消⽕器さんの 「プログラミング演習」 です!