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

Python入門

Shohei Okada
September 01, 2014

 Python入門

H26年度オープンハウス・アドバンストコース用資料

Shohei Okada

September 01, 2014
Tweet

More Decks by Shohei Okada

Other Decks in Programming

Transcript

  1. Pythonとは? • スクリプト言語と呼ばれる言語の一種 – 他のスクリプト言語:Perl, Ruby など • シンプルな構文 •

    豊富な標準ライブラリ • Google, Yahoo!, NASAなどでも使われている 2014/9/1 H26年度オープンハウス・アドバンストコース 4
  2. プログラムファイルを実行 • テキストエディタでプログラムを作成 – 拡張子は .py • 端末上でプログラムファイルの保存場所へ移動 • python

    (ファイル名).py とタイプ • 実行結果が出力される 2014/9/1 H26年度オープンハウス・アドバンストコース 8
  3. 動作確認 • 対話型インタプリタを起動し,次の通り入力し 出力を確認 >>> print "Hello World!" Hello World!

    >>> print 1 + 1 2 2014/9/1 H26年度オープンハウス・アドバンストコース 9
  4. 動作確認 • 対話型インタプリタを起動し,次の通り入力し 出力を確認 >>> print "Hello World!" Hello World!

    >>> print 1 + 1 2 2014/9/1 H26年度オープンハウス・アドバンストコース 10
  5. 動作確認 • 次の内容のプログラムファイルを作成 • プログラムを実行し,出力を確認 % python (ファイル名).py Hello World!

    #! /usr/bin/ python # coding: utf-8 print "Hello World!" 2014/9/1 H26年度オープンハウス・アドバンストコース 11
  6. 動作確認 • 次の内容のプログラムファイルを作成 • プログラムを実行し,出力を確認 % python (ファイル名).py Hello World!

    #! /usr/bin/ python # coding: utf-8 print "Hello World!" 2014/9/1 H26年度オープンハウス・アドバンストコース 12
  7. if文 • 条件分岐にはif文を使う >>> if a == b: ... print

    "a==b" ... elif a == c: ... print "a==c" ... else: print "nothing" 2014/9/1 H26年度オープンハウス・アドバンストコース 17
  8. 条件部分 • True/Falseを返す演算子やメソッド – 比較演算子 ==, >, <, =>, =<

    – 論理演算子 and, or, not >>> 2 == 3 False >>> 1 < 2 and not 2 == 3 True 2014/9/1 H26年度オープンハウス・アドバンストコース 18
  9. 条件部分 • True/Falseを返す演算子やメソッド – 比較演算子 ==, >, <, =>, =<

    – 論理演算子 and, or, not >>> 2 == 3 False >>> 1 < 2 and not 2 == 3 True 2014/9/1 H26年度オープンハウス・アドバンストコース 19
  10. 条件部分 – 演算子 in – startswith, endswithなどのメソッド >>> 2 in

    [1, 2, 3] True >>> "Hello".startswith("He") True 2014/9/1 H26年度オープンハウス・アドバンストコース 20
  11. 条件部分 – 演算子 in – startswith, endswithなどのメソッド >>> 2 in

    [1, 2, 3] True >>> "Hello".startswith("He") True 2014/9/1 H26年度オープンハウス・アドバンストコース 21
  12. ※備考1 • True/False の2値だけを持つデータ型を bool型という • 数値の0や,空のコンテナ(list, dictなど)は Falseとして評価される >>>

    if not 0: ... print "empty" # 結果,"empty"と表示 2014/9/1 H26年度オープンハウス・アドバンストコース 22
  13. while文 • 条件がTrueの間繰り返し >>> i = 0 >>> while i

    < 3: # i が3未満の間繰り返し ... i = i + 1 >>> print i 3 2014/9/1 H26年度オープンハウス・アドバンストコース 23
  14. while文 • 条件がTrueの間繰り返し >>> i = 0 >>> while i

    < 3: # i が3未満の間繰り返し ... i = i + 1 >>> print i 3 2014/9/1 H26年度オープンハウス・アドバンストコース 24
  15. for文 • コンテナ(list等)の要素に順次アクセス >>> for i in range(3): ... print

    i 0 1 2 2014/9/1 H26年度オープンハウス・アドバンストコース 25 range(n) 0~nまでの整数の リストを返す 組み込み関数
  16. for文 • コンテナ(list等)の要素に順次アクセス >>> for i in range(3): ... print

    i 0 1 2 2014/9/1 H26年度オープンハウス・アドバンストコース 26 range(n) 0~nまでの整数の リストを返す 組み込み関数
  17. for文, while文の制御 • continue – 次のループに進む • break – ループから抜け出す

    2014/9/1 H26年度オープンハウス・アドバンストコース 28
  18. def文 • 関数の定義 • return 文で値を返す or 関数を抜ける >>> def

    add(a, b): ... return a + b >>> add(1, 2) 3 2014/9/1 H26年度オープンハウス・アドバンストコース 29
  19. def文 • 関数の定義 • return 文で値を返す or 関数を抜ける >>> def

    add(a, b): ... return a + b >>> add(1, 2) 3 2014/9/1 H26年度オープンハウス・アドバンストコース 30
  20. データ型 >>> a = 1 # aは自動的にint型になる >>> print a

    1 >>> a = "Hello World!" # 今度はstr型になる >>> print a Hello World! 2014/9/1 H26年度オープンハウス・アドバンストコース 33
  21. データ型 >>> a = 1 # aは自動的にint型になる >>> print a

    1 >>> a = "Hello World!" # 今度はstr型になる >>> print a Hello World! 2014/9/1 H26年度オープンハウス・アドバンストコース 34
  22. int型,float型 • 数値を格納する型(int:整数,float:実数) • 演算子による四則演算が可能 >>> a = 2 #

    int >>> b = 3.0 # float >>> a + b 5.0 演算子 演算内容 + 足し算 - 引き算 * 掛け算 / 割り算(型に注意) // 商 % 剰余 ** 累乗 2014/9/1 H26年度オープンハウス・アドバンストコース 35
  23. int型,float型 • 数値を格納する型(int:整数,float:実数) • 演算子による四則演算が可能 >>> a = 2 #

    int >>> b = 3.0 # float >>> a + b 5.0 演算子 演算内容 + 足し算 - 引き算 * 掛け算 / 割り算(型に注意) // 商 % 剰余 ** 累乗 2014/9/1 H26年度オープンハウス・アドバンストコース 36
  24. list型 • 複数の値を格納する型 >>> a = [1, 2.0,"ab", 4] #

    要素の型は混在可能 >>> print a[2] 2.0 >>> print a[-1] 4 2014/9/1 H26年度オープンハウス・アドバンストコース 37
  25. list型 • 複数の値を格納する型 >>> a = [1, 2.0,"ab", 4] #

    要素の型は混在可能 >>> print a[2] 2.0 >>> print a[-1] 4 2014/9/1 H26年度オープンハウス・アドバンストコース 38
  26. list型 >>> a[1:3] # スライスで範囲を取出す [2.0, "ab"] # 結果もlist >>>

    a[1:] [2.0, "ab", 4] >>> a[:2] [1, 2.0] 2014/9/1 H26年度オープンハウス・アドバンストコース 39
  27. list型 >>> a[1:3] # スライスで範囲を取出す [2.0, "ab"] # 結果もlist >>>

    a[1:] [2.0, "ab", 4] >>> a[:2] [1, 2.0] 2014/9/1 H26年度オープンハウス・アドバンストコース 40
  28. >>> a.append("xyz") # 要素の追加 >>> print a [1, 2.0, "ab",

    4, "xyz"] >>> a.insert(2, "three") # 要素の挿入 >>> print a [1, 2.0, “three”, "ab", 4, "xyz"] list型 2014/9/1 H26年度オープンハウス・アドバンストコース 41
  29. >>> a.append("xyz") # 要素の追加 >>> print a [1, 2.0, "ab",

    4, "xyz"] >>> a.insert(2, "three") # 要素の挿入 >>> print a [1, 2.0, “three”, "ab", 4, "xyz"] list型 2014/9/1 H26年度オープンハウス・アドバンストコース 42
  30. >>> del a[2] # 要素の削除(位置指定) >>> print a [1, 2.0,

    "ab", 4, "xyz"] >>> a.remove("xyz") # 要素の削除(要素指定) >>> print a [1, 2.0, "ab“, 4] list型 2014/9/1 H26年度オープンハウス・アドバンストコース 43
  31. >>> del a[2] # 要素の削除(位置指定) >>> print a [1, 2.0,

    "ab", 4, "xyz"] >>> a.remove("xyz") # 要素の削除(要素指定) >>> print a [1, 2.0, "ab", 4] list型 2014/9/1 H26年度オープンハウス・アドバンストコース 44
  32. >>> b = [5, 6, 7] >>> a + b

    # listの足し算 [1, 2.0, "ab", 4, 5, 6, 7] >>> b * 2 # listの整数倍 [5, 6, 7, 5, 6, 7] list型 2014/9/1 H26年度オープンハウス・アドバンストコース 45
  33. >>> b = [5, 6, 7] >>> a + b

    # listの足し算 [1, 2.0, "ab", 4, 5, 6, 7] >>> b * 2 # listの整数倍 [5, 6, 7, 5, 6, 7] list型 2014/9/1 H26年度オープンハウス・アドバンストコース 46
  34. list型 >>> a = [5, 2, 7, 9] >>> a.sort()

    # 要素の値でソート >>> print a [2, 5, 7, 9] >>> a.reverse() # 逆順 >>> print a [9, 7, 5, 2] 2014/9/1 H26年度オープンハウス・アドバンストコース 47
  35. list型 >>> a = [5, 2, 7, 9] >>> a.sort()

    # 要素の値でソート >>> print a [2, 5, 7, 9] >>> a.reverse() # 逆順 >>> print a [9, 7, 5, 2] 2014/9/1 H26年度オープンハウス・アドバンストコース 48
  36. list型 >>> a = [1, 2, 1, 1] >>> len(a)

    # 全要素の数 4 >>> a.count(1) # 特定の要素の数 3 2014/9/1 H26年度オープンハウス・アドバンストコース 49
  37. list型 >>> a = [1, 2, 1, 1] >>> len(a)

    # 全要素の数 4 >>> a.count(1) # 特定の要素の数 3 2014/9/1 H26年度オープンハウス・アドバンストコース 50
  38. str型 • 文字列を格納する型 • 1文字でもstr型(charのような型はない) >>> a = "Hello" #

    ''でも""でも良い >>> print a Hello 2014/9/1 H26年度オープンハウス・アドバンストコース 52
  39. str型 • 一部のメソッドはlistと共通, スライス,len()も使用可 >>> a.count("l") # countメソッド 2 >>>

    a[1:3] #スライス "el" 2014/9/1 H26年度オープンハウス・アドバンストコース 53
  40. str型 • 一部のメソッドはlistと共通, スライス,len()も使用可 >>> a.count("l") # countメソッド 2 >>>

    a[1:3] #スライス "el" 2014/9/1 H26年度オープンハウス・アドバンストコース 54
  41. str型 >>> b = "World" >>> a + b #

    文字列の足し算 'HelloWorld' >>> a * 3 # 文字列の整数倍 'HelloHelloHello' 2014/9/1 H26年度オープンハウス・アドバンストコース 55
  42. str型 >>> b = "World" >>> a + b #

    文字列の足し算 'HelloWorld' >>> a * 3 # 文字列の整数倍 'HelloHelloHello' 2014/9/1 H26年度オープンハウス・アドバンストコース 56
  43. str型 >>> a.find("e") # 文字列の位置検索 1 >>> a.replace("llo", "y") #

    部分文字列の置換 'Hey' 2014/9/1 H26年度オープンハウス・アドバンストコース 57
  44. str型 >>> a.find("e") # 文字列の位置検索 1 >>> a.replace("llo", "y") #

    部分文字列の置換 'Hey' 2014/9/1 H26年度オープンハウス・アドバンストコース 58
  45. str型 >>> text = "This is a pen" >>> words

    = text.split() # 空白文字で区切る >>> print words ['This', 'is', 'a', 'pen'] # 結果はlist >>> "_".join(words) # listを連結する 'This_is_a_pen' 2014/9/1 H26年度オープンハウス・アドバンストコース 59
  46. str型 >>> text = "This is a pen" >>> words

    = text.split() # 空白文字で区切る >>> print words ['This', 'is', 'a', 'pen'] # 結果はlist >>> "_".join(words) # listを連結する 'This_is_a_pen' 2014/9/1 H26年度オープンハウス・アドバンストコース 60
  47. str型 >>> text.lower() # 小文字化 'this is a pen' >>>

    text.upper() # 大文字化 'THIS IS A PEN' >>> text.startswith("pen") # 先頭はpenかどうか False >>> text.endswith("pen") # 末尾はpenかどうか True 2014/9/1 H26年度オープンハウス・アドバンストコース 61
  48. str型 >>> text.lower() # 小文字化 'this is a pen' >>>

    text.upper() # 大文字化 'THIS IS A PEN' >>> text.startswith("pen") # 先頭はpenかどうか False >>> text.endswith("pen") # 末尾はpenかどうか True 2014/9/1 H26年度オープンハウス・アドバンストコース 62
  49. str型 >>> a = "Nagaoka" >>> len(a) 7 >>> a

    = "長岡技大" >>> len(a) 12 2014/9/1 H26年度オープンハウス・アドバンストコース 63
  50. str型 >>> a = "Nagaoka" >>> len(a) 7 >>> a

    = "長岡技大" >>> len(a) 12 # !? 2014/9/1 H26年度オープンハウス・アドバンストコース 64
  51. unicode型 • 日本語のような多バイト文字を扱うには unicode型を用いる >>> a = u"いろは" # u"文字列"の形

    • str型とほぼ同じメソッドを持っているが, あくまで異なる型であることに注意 >>> "abc" + u"いろは" # エラーになる 2014/9/1 H26年度オープンハウス・アドバンストコース 65
  52. str型とunicode型 >>> unicode("Hello") # str -> unicode u'Hello' >>> u"Hello".encode("utf-8")

    # unicode -> str 'Hello' ※「utf-8(unicode)」でエンコードされたstr型と, unicode型は異なるものなので注意 2014/9/1 H26年度オープンハウス・アドバンストコース 66
  53. ※備考3 • 今回の演習で使っているPythonは2.x系 • 現在は3.x系もある – print が関数化 – str型を廃止しunicode型に統一

    • ただし,一部ライブラリが未対応の場合も – 徐々に対応してきている 2014/9/1 H26年度オープンハウス・アドバンストコース 67
  54. dict型 • 他の言語では「ハッシュ」や「連想配列」と 呼ばれる型 • keyとvalueの組が格納される • keyを指定してvalueにアクセスする >>> a

    = {"name": "Tom", "age": 20} >>> a["name"] 'Tom' 2014/9/1 H26年度オープンハウス・アドバンストコース 68
  55. dict型 • 他の言語では「ハッシュ」や「連想配列」と 呼ばれる型 • keyとvalueの組が格納される • keyを指定してvalueにアクセスする >>> a

    = {"name": "Tom", "age": 20} >>> a["name"] 'Tom' 2014/9/1 H26年度オープンハウス・アドバンストコース 69
  56. dict型 >>> a["name"] = "Ken" # valueの上書き >>> print a

    {"age": 20, "name": "Ken"} # 順番を保持しない >>> a["job"] = "student" # 要素の追加 >>> print a {"job": "student", "age": 20, "name": "Ken"} 2014/9/1 H26年度オープンハウス・アドバンストコース 70
  57. dict型 >>> a["name"] = "Ken" # valueの上書き >>> print a

    {"age": 20, "name": "Ken"} # 順番を保持しない >>> a["job"] = "student" # 要素の追加 >>> print a {"job": "student", "age": 20, "name": "Ken"} 2014/9/1 H26年度オープンハウス・アドバンストコース 71
  58. dict型 >>> len(a) 3 >>> a.keys() # 全てkeyを返す ["job", "age",

    "name"] # 結果はlist >>> a.values() # 全てのvalueを返す ["student", 20, "Ken"] # 結果はlist 2014/9/1 H26年度オープンハウス・アドバンストコース 72
  59. dict型 >>> len(a) 3 >>> a.keys() # 全てkeyを返す ["job", "age",

    "name"] # 結果はlist >>> a.values() # 全てのvalueを返す ["student", 20, "Ken"] # 結果はlist 2014/9/1 H26年度オープンハウス・アドバンストコース 73
  60. ファイルから入力 • for文によるアクセスも可能(1行ずつ) >>> fin = open("file.txt", "r") >>> for

    line in fin: ... print line.strip() 2014/9/1 H26年度オープンハウス・アドバンストコース 77 str.strip() 文字列両端の空白文字 (スペースや改行) を取り除くstr型のメソッド
  61. 標準出力 • print文を利用 >>> a = "Hello" >>> b =

    "World" >>> print a, b # ,(カンマ)区切り 'Hello World' 2014/9/1 H26年度オープンハウス・アドバンストコース 79
  62. 標準出力 • print文を利用 >>> a = "Hello" >>> b =

    "World" >>> print a, b # ,(カンマ)区切り Hello World 2014/9/1 H26年度オープンハウス・アドバンストコース 80
  63. 標準出力 • str型のformatメソッド >>> a = "Hello" >>> b =

    "Tom" >>> print "{0}, {1}".format(a, b) 'Hello, Tom' >>> print "{greets}, {name}".format(greets=a,name=b) 'Hello, Tom' 2014/9/1 H26年度オープンハウス・アドバンストコース 81
  64. 標準出力 • str型のformatメソッド >>> a = "Hello" >>> b =

    "Tom" >>> print "{0}, {1}".format(a, b) Hello, Tom >>> print "{greets}, {name}".format(greets=a,name=b) Hello, Tom 2014/9/1 H26年度オープンハウス・アドバンストコース 82
  65. その他の機能 • その他にもできることは沢山ある – 乱数,数学関数,正規表現等 • なにか欲しい機能があったら – TAに聞いてみる –

    公式ドキュメントを調べる • http://docs.python.jp/2/ 2014/9/1 H26年度オープンハウス・アドバンストコース 84
  66. FizzBuzz問題 • 1~100までの数字を順に1行ずつ出力する • ただし, – 3で割り切れる場合は代わりに Fizz と –

    5で割り切れる場合は代わりに Buzz と – 3と5両方で割り切れる場合は代わりに Fizz Buzzと 出力する 2014/9/1 H26年度オープンハウス・アドバンストコース 86