$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Python入門
Search
Shohei Okada
September 01, 2014
Programming
0
680
Python入門
H26年度オープンハウス・アドバンストコース用資料
Shohei Okada
September 01, 2014
Tweet
Share
More Decks by Shohei Okada
See All by Shohei Okada
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
650
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
2
1.8k
パスワードのハッシュ、ソルトってなに? - What is hash and salt for password?
okashoi
3
300
設計の考え方 - インターフェースと腐敗防止層編 #phpconfuk / Interface and Anti Corruption Layer
okashoi
11
5k
"config" ってなんだ? / What is "config"?
okashoi
0
1.6k
ファイル先頭の use の意味、説明できますか? 〜PHP の namespace と autoloading の関係を正しく理解しよう〜 / namespace and autoloading in php
okashoi
4
1.9k
MySQL のインデックスの種類をおさらいしよう! / overviewing indexes in MySQL
okashoi
0
1.2k
PHP における静的解析(あるいはそもそも静的解析とは) / #phpcondo_yasai static analysis for PHP
okashoi
1
1k
【PHPカンファレンス沖縄 2023】素朴で考慮漏れのある PHP コードをテストコードとともに補強していく(ライブコーディング補足資料) / #phpcon_okinawa 2023 livecoding supplementary material
okashoi
3
2.1k
Other Decks in Programming
See All in Programming
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
160
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
120
著者と進める!『AIと個人開発したくなったらまずCursorで要件定義だ!』
yasunacoffee
0
160
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
Go コードベースの構成と AI コンテキスト定義
andpad
0
140
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
280
生成AI時代を勝ち抜くエンジニア組織マネジメント
coconala_engineer
0
7.9k
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
620
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
900
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
3.9k
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.7k
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.4k
Featured
See All Featured
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
190
Rebuilding a faster, lazier Slack
samanthasiow
85
9.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Un-Boring Meetings
codingconduct
0
160
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
400
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
210
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
2
2.8k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
90
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
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