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
670
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
190
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
1.4k
パスワードのハッシュ、ソルトってなに? - What is hash and salt for password?
okashoi
3
210
設計の考え方 - インターフェースと腐敗防止層編 #phpconfuk / Interface and Anti Corruption Layer
okashoi
11
3.8k
"config" ってなんだ? / What is "config"?
okashoi
0
1.2k
ファイル先頭の use の意味、説明できますか? 〜PHP の namespace と autoloading の関係を正しく理解しよう〜 / namespace and autoloading in php
okashoi
4
1.6k
MySQL のインデックスの種類をおさらいしよう! / overviewing indexes in MySQL
okashoi
0
890
PHP における静的解析(あるいはそもそも静的解析とは) / #phpcondo_yasai static analysis for PHP
okashoi
1
600
【PHPカンファレンス沖縄 2023】素朴で考慮漏れのある PHP コードをテストコードとともに補強していく(ライブコーディング補足資料) / #phpcon_okinawa 2023 livecoding supplementary material
okashoi
3
1.9k
Other Decks in Programming
See All in Programming
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
110
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
300
プロダクト志向ってなんなんだろうね
righttouch
PRO
0
160
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
180
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
790
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
890
VS Code Update for GitHub Copilot
74th
1
380
アンドパッドの Go 勉強会「 gopher 会」とその内容の紹介
andpad
0
260
Deep Dive into ~/.claude/projects
hiragram
8
1.5k
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
420
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
810
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
110
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
210
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Statistics for Hackers
jakevdp
799
220k
Documentation Writing (for coders)
carmenintech
72
4.9k
Building Adaptive Systems
keathley
43
2.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.3k
Docker and Python
trallard
44
3.4k
Building an army of robots
kneath
306
45k
Building Applications with DynamoDB
mza
95
6.5k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Gamification - CAS2011
davidbonilla
81
5.3k
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