Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Python入門
Search
Shohei Okada
September 01, 2014
Programming
0
660
Python入門
H26年度オープンハウス・アドバンストコース用資料
Shohei Okada
September 01, 2014
Tweet
Share
More Decks by Shohei Okada
See All by Shohei Okada
パスワードのハッシュ、ソルトってなに? - What is hash and salt for password?
okashoi
3
87
設計の考え方 - インターフェースと腐敗防止層編 #phpconfuk / Interface and Anti Corruption Layer
okashoi
9
2.6k
"config" ってなんだ? / What is "config"?
okashoi
0
650
ファイル先頭の use の意味、説明できますか? 〜PHP の namespace と autoloading の関係を正しく理解しよう〜 / namespace and autoloading in php
okashoi
3
1k
MySQL のインデックスの種類をおさらいしよう! / overviewing indexes in MySQL
okashoi
0
650
PHP における静的解析(あるいはそもそも静的解析とは) / #phpcondo_yasai static analysis for PHP
okashoi
1
440
【PHPカンファレンス沖縄 2023】素朴で考慮漏れのある PHP コードをテストコードとともに補強していく(ライブコーディング補足資料) / #phpcon_okinawa 2023 livecoding supplementary material
okashoi
3
1.8k
その説明、コードコメントに書く?コミットメッセージに書く? プルリクエストに書く? - #phpconfuk 2023
okashoi
14
4.9k
いろいろなフレームワークの仕組みを index.php から読み解こう / index.php of each framework
okashoi
2
2.6k
Other Decks in Programming
See All in Programming
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
220
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.3k
Quine, Polyglot, 良いコード
qnighy
4
640
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
330
受け取る人から提供する人になるということ
little_rubyist
0
230
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.1k
Jakarta EE meets AI
ivargrimstad
0
630
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
220
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
Building Adaptive Systems
keathley
38
2.3k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
GraphQLとの向き合い方2022年版
quramy
43
13k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Raft: Consensus for Rubyists
vanstee
136
6.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Automating Front-end Workflow
addyosmani
1366
200k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Building Your Own Lightsaber
phodgson
103
6.1k
Transcript
Python入門 長岡技術科学大学 自然言語処理研究室 presented by 岡田 正平
はじめに • これから1日かけて多くのことを教えますが 全て暗記しようとは思わず,Pythonで何が出来 るのかを何となく頭に入れた上で, あとでこの資料等を参照しながらプログラム 出来るようにしましょう. • スライド中の空欄は,適宜自分で試してみて 結果を記入していきましょう.
Pythonとは?
Pythonとは? • スクリプト言語と呼ばれる言語の一種 – 他のスクリプト言語:Perl, Ruby など • シンプルな構文 •
豊富な標準ライブラリ • Google, Yahoo!, NASAなどでも使われている 2014/9/1 H26年度オープンハウス・アドバンストコース 4
Pythonを使う
Pythonを使う • 2種類の方法 – 対話型インタプリタ – プログラムファイルを実行 2014/9/1 H26年度オープンハウス・アドバンストコース 6
対話型インタプリタ • 端末上で python とタイプ • 1行ずつプログラムを書いていく 2014/9/1 H26年度オープンハウス・アドバンストコース 7
プログラムファイルを実行 • テキストエディタでプログラムを作成 – 拡張子は .py • 端末上でプログラムファイルの保存場所へ移動 • python
(ファイル名).py とタイプ • 実行結果が出力される 2014/9/1 H26年度オープンハウス・アドバンストコース 8
動作確認 • 対話型インタプリタを起動し,次の通り入力し 出力を確認 >>> print "Hello World!" Hello World!
>>> print 1 + 1 2 2014/9/1 H26年度オープンハウス・アドバンストコース 9
動作確認 • 対話型インタプリタを起動し,次の通り入力し 出力を確認 >>> print "Hello World!" Hello World!
>>> print 1 + 1 2 2014/9/1 H26年度オープンハウス・アドバンストコース 10
動作確認 • 次の内容のプログラムファイルを作成 • プログラムを実行し,出力を確認 % python (ファイル名).py Hello World!
#! /usr/bin/ python # coding: utf-8 print "Hello World!" 2014/9/1 H26年度オープンハウス・アドバンストコース 11
動作確認 • 次の内容のプログラムファイルを作成 • プログラムを実行し,出力を確認 % python (ファイル名).py Hello World!
#! /usr/bin/ python # coding: utf-8 print "Hello World!" 2014/9/1 H26年度オープンハウス・アドバンストコース 12
※注意 • プログラムファイルの先頭2行はおまじない (だと思って良い) • 今後の演習でも必ず記述しておく 2014/9/1 H26年度オープンハウス・アドバンストコース 13 #!
/usr/bin/ python # coding: utf-8
これからの演習 • 今日のPython講座の演習は 対話型インタプリタ上でやります • 明日以降の機械翻訳機の作成は テキストエディタでプログラムファイルを作成 することになると思います 2014/9/1 H26年度オープンハウス・アドバンストコース
14
構文
インデント • Pythonではコードのブロックを インデントで表す – 同じレベルのインデントは高さを揃える – 1つのインデントはスペース4つ推奨 >>> if
a == b: ... print "same" 2014/9/1 H26年度オープンハウス・アドバンストコース 16
if文 • 条件分岐にはif文を使う >>> if a == b: ... print
"a==b" ... elif a == c: ... print "a==c" ... else: print "nothing" 2014/9/1 H26年度オープンハウス・アドバンストコース 17
条件部分 • True/Falseを返す演算子やメソッド – 比較演算子 ==, >, <, =>, =<
– 論理演算子 and, or, not >>> 2 == 3 False >>> 1 < 2 and not 2 == 3 True 2014/9/1 H26年度オープンハウス・アドバンストコース 18
条件部分 • True/Falseを返す演算子やメソッド – 比較演算子 ==, >, <, =>, =<
– 論理演算子 and, or, not >>> 2 == 3 False >>> 1 < 2 and not 2 == 3 True 2014/9/1 H26年度オープンハウス・アドバンストコース 19
条件部分 – 演算子 in – startswith, endswithなどのメソッド >>> 2 in
[1, 2, 3] True >>> "Hello".startswith("He") True 2014/9/1 H26年度オープンハウス・アドバンストコース 20
条件部分 – 演算子 in – startswith, endswithなどのメソッド >>> 2 in
[1, 2, 3] True >>> "Hello".startswith("He") True 2014/9/1 H26年度オープンハウス・アドバンストコース 21
※備考1 • True/False の2値だけを持つデータ型を bool型という • 数値の0や,空のコンテナ(list, dictなど)は Falseとして評価される >>>
if not 0: ... print "empty" # 結果,"empty"と表示 2014/9/1 H26年度オープンハウス・アドバンストコース 22
while文 • 条件がTrueの間繰り返し >>> i = 0 >>> while i
< 3: # i が3未満の間繰り返し ... i = i + 1 >>> print i 3 2014/9/1 H26年度オープンハウス・アドバンストコース 23
while文 • 条件がTrueの間繰り返し >>> i = 0 >>> while i
< 3: # i が3未満の間繰り返し ... i = i + 1 >>> print i 3 2014/9/1 H26年度オープンハウス・アドバンストコース 24
for文 • コンテナ(list等)の要素に順次アクセス >>> for i in range(3): ... print
i 0 1 2 2014/9/1 H26年度オープンハウス・アドバンストコース 25 range(n) 0~nまでの整数の リストを返す 組み込み関数
for文 • コンテナ(list等)の要素に順次アクセス >>> for i in range(3): ... print
i 0 1 2 2014/9/1 H26年度オープンハウス・アドバンストコース 26 range(n) 0~nまでの整数の リストを返す 組み込み関数
for文 • 順次アクセスのイメージ 2014/9/1 H26年度オープンハウス・アドバンストコース 27
for文, while文の制御 • continue – 次のループに進む • break – ループから抜け出す
2014/9/1 H26年度オープンハウス・アドバンストコース 28
def文 • 関数の定義 • return 文で値を返す or 関数を抜ける >>> def
add(a, b): ... return a + b >>> add(1, 2) 3 2014/9/1 H26年度オープンハウス・アドバンストコース 29
def文 • 関数の定義 • return 文で値を返す or 関数を抜ける >>> def
add(a, b): ... return a + b >>> add(1, 2) 3 2014/9/1 H26年度オープンハウス・アドバンストコース 30
データ型
データ型 • Pythonに変数宣言は無い – 値を代入することで自動で型付けされる – 別の値を代入すると型は動的に変化する • 型にはint, float,
str, list, dict等がある(後述) 2014/9/1 H26年度オープンハウス・アドバンストコース 32
データ型 >>> a = 1 # aは自動的にint型になる >>> print a
1 >>> a = "Hello World!" # 今度はstr型になる >>> print a Hello World! 2014/9/1 H26年度オープンハウス・アドバンストコース 33
データ型 >>> a = 1 # aは自動的にint型になる >>> print a
1 >>> a = "Hello World!" # 今度はstr型になる >>> print a Hello World! 2014/9/1 H26年度オープンハウス・アドバンストコース 34
int型,float型 • 数値を格納する型(int:整数,float:実数) • 演算子による四則演算が可能 >>> a = 2 #
int >>> b = 3.0 # float >>> a + b 5.0 演算子 演算内容 + 足し算 - 引き算 * 掛け算 / 割り算(型に注意) // 商 % 剰余 ** 累乗 2014/9/1 H26年度オープンハウス・アドバンストコース 35
int型,float型 • 数値を格納する型(int:整数,float:実数) • 演算子による四則演算が可能 >>> a = 2 #
int >>> b = 3.0 # float >>> a + b 5.0 演算子 演算内容 + 足し算 - 引き算 * 掛け算 / 割り算(型に注意) // 商 % 剰余 ** 累乗 2014/9/1 H26年度オープンハウス・アドバンストコース 36
list型 • 複数の値を格納する型 >>> a = [1, 2.0,"ab", 4] #
要素の型は混在可能 >>> print a[2] 2.0 >>> print a[-1] 4 2014/9/1 H26年度オープンハウス・アドバンストコース 37
list型 • 複数の値を格納する型 >>> a = [1, 2.0,"ab", 4] #
要素の型は混在可能 >>> print a[2] 2.0 >>> print a[-1] 4 2014/9/1 H26年度オープンハウス・アドバンストコース 38
list型 >>> a[1:3] # スライスで範囲を取出す [2.0, "ab"] # 結果もlist >>>
a[1:] [2.0, "ab", 4] >>> a[:2] [1, 2.0] 2014/9/1 H26年度オープンハウス・アドバンストコース 39
list型 >>> a[1:3] # スライスで範囲を取出す [2.0, "ab"] # 結果もlist >>>
a[1:] [2.0, "ab", 4] >>> a[:2] [1, 2.0] 2014/9/1 H26年度オープンハウス・アドバンストコース 40
>>> 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
>>> 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
>>> 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
>>> 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
>>> 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
>>> 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
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
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
list型 >>> a = [1, 2, 1, 1] >>> len(a)
# 全要素の数 4 >>> a.count(1) # 特定の要素の数 3 2014/9/1 H26年度オープンハウス・アドバンストコース 49
list型 >>> a = [1, 2, 1, 1] >>> len(a)
# 全要素の数 4 >>> a.count(1) # 特定の要素の数 3 2014/9/1 H26年度オープンハウス・アドバンストコース 50
※備考2 • Pythonはオブジェクト指向言語でもある – すべてのデータはオブジェクト c.f.) Java: int型等はオブジェクトではない • オブジェクトはメソッドとよばれる
関数(のようなもの)を持つ >>> a.append(2) 2014/9/1 H26年度オープンハウス・アドバンストコース 51 メソッド
str型 • 文字列を格納する型 • 1文字でもstr型(charのような型はない) >>> a = "Hello" #
''でも""でも良い >>> print a Hello 2014/9/1 H26年度オープンハウス・アドバンストコース 52
str型 • 一部のメソッドはlistと共通, スライス,len()も使用可 >>> a.count("l") # countメソッド 2 >>>
a[1:3] #スライス "el" 2014/9/1 H26年度オープンハウス・アドバンストコース 53
str型 • 一部のメソッドはlistと共通, スライス,len()も使用可 >>> a.count("l") # countメソッド 2 >>>
a[1:3] #スライス "el" 2014/9/1 H26年度オープンハウス・アドバンストコース 54
str型 >>> b = "World" >>> a + b #
文字列の足し算 'HelloWorld' >>> a * 3 # 文字列の整数倍 'HelloHelloHello' 2014/9/1 H26年度オープンハウス・アドバンストコース 55
str型 >>> b = "World" >>> a + b #
文字列の足し算 'HelloWorld' >>> a * 3 # 文字列の整数倍 'HelloHelloHello' 2014/9/1 H26年度オープンハウス・アドバンストコース 56
str型 >>> a.find("e") # 文字列の位置検索 1 >>> a.replace("llo", "y") #
部分文字列の置換 'Hey' 2014/9/1 H26年度オープンハウス・アドバンストコース 57
str型 >>> a.find("e") # 文字列の位置検索 1 >>> a.replace("llo", "y") #
部分文字列の置換 'Hey' 2014/9/1 H26年度オープンハウス・アドバンストコース 58
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
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
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
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
str型 >>> a = "Nagaoka" >>> len(a) 7 >>> a
= "長岡技大" >>> len(a) 12 2014/9/1 H26年度オープンハウス・アドバンストコース 63
str型 >>> a = "Nagaoka" >>> len(a) 7 >>> a
= "長岡技大" >>> len(a) 12 # !? 2014/9/1 H26年度オープンハウス・アドバンストコース 64
unicode型 • 日本語のような多バイト文字を扱うには unicode型を用いる >>> a = u"いろは" # u"文字列"の形
• str型とほぼ同じメソッドを持っているが, あくまで異なる型であることに注意 >>> "abc" + u"いろは" # エラーになる 2014/9/1 H26年度オープンハウス・アドバンストコース 65
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
※備考3 • 今回の演習で使っているPythonは2.x系 • 現在は3.x系もある – print が関数化 – str型を廃止しunicode型に統一
• ただし,一部ライブラリが未対応の場合も – 徐々に対応してきている 2014/9/1 H26年度オープンハウス・アドバンストコース 67
dict型 • 他の言語では「ハッシュ」や「連想配列」と 呼ばれる型 • keyとvalueの組が格納される • keyを指定してvalueにアクセスする >>> a
= {"name": "Tom", "age": 20} >>> a["name"] 'Tom' 2014/9/1 H26年度オープンハウス・アドバンストコース 68
dict型 • 他の言語では「ハッシュ」や「連想配列」と 呼ばれる型 • keyとvalueの組が格納される • keyを指定してvalueにアクセスする >>> a
= {"name": "Tom", "age": 20} >>> a["name"] 'Tom' 2014/9/1 H26年度オープンハウス・アドバンストコース 69
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
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
dict型 >>> len(a) 3 >>> a.keys() # 全てkeyを返す ["job", "age",
"name"] # 結果はlist >>> a.values() # 全てのvalueを返す ["student", 20, "Ken"] # 結果はlist 2014/9/1 H26年度オープンハウス・アドバンストコース 72
dict型 >>> len(a) 3 >>> a.keys() # 全てkeyを返す ["job", "age",
"name"] # 結果はlist >>> a.values() # 全てのvalueを返す ["student", 20, "Ken"] # 結果はlist 2014/9/1 H26年度オープンハウス・アドバンストコース 73
入出力
ファイルから入力 • openを使ってファイルオブジェクトを生成 • メソッドでファイル内容にアクセス # file.txtを読み込み専用で開く >>> fin =
open("file.txt", "r") >>> fin.close() # 使い終わったらclose()
ファイルから入力 • 一度にファイル内容全てを読み出す fin.read() • 一行ずつ読み出す fin.readline() • 各行をlistの要素として一度に全て読み出す fin.readlines()
2014/9/1 H26年度オープンハウス・アドバンストコース 76
ファイルから入力 • for文によるアクセスも可能(1行ずつ) >>> fin = open("file.txt", "r") >>> for
line in fin: ... print line.strip() 2014/9/1 H26年度オープンハウス・アドバンストコース 77 str.strip() 文字列両端の空白文字 (スペースや改行) を取り除くstr型のメソッド
標準入力 • 組み込みモジュールsysをimportする • sys.stdin が標準入力を表す • ファイルオブジェクトと同様にアクセス可能 >>> import
sys >>> text = sys.stdin.read() 2014/9/1 H26年度オープンハウス・アドバンストコース 78
標準出力 • print文を利用 >>> a = "Hello" >>> b =
"World" >>> print a, b # ,(カンマ)区切り 'Hello World' 2014/9/1 H26年度オープンハウス・アドバンストコース 79
標準出力 • print文を利用 >>> a = "Hello" >>> b =
"World" >>> print a, b # ,(カンマ)区切り Hello World 2014/9/1 H26年度オープンハウス・アドバンストコース 80
標準出力 • 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
標準出力 • 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
その他の機能 2014/9/1 H26年度オープンハウス・アドバンストコース 83
その他の機能 • その他にもできることは沢山ある – 乱数,数学関数,正規表現等 • なにか欲しい機能があったら – TAに聞いてみる –
公式ドキュメントを調べる • http://docs.python.jp/2/ 2014/9/1 H26年度オープンハウス・アドバンストコース 84
課題 2014/9/1 H26年度オープンハウス・アドバンストコース 85
FizzBuzz問題 • 1~100までの数字を順に1行ずつ出力する • ただし, – 3で割り切れる場合は代わりに Fizz と –
5で割り切れる場合は代わりに Buzz と – 3と5両方で割り切れる場合は代わりに Fizz Buzzと 出力する 2014/9/1 H26年度オープンハウス・アドバンストコース 86