Python 程式設計 林奇賦 daky1983@gmail.com
Outline u 課程簡介 u Python 介紹 u 環境安裝說明 u 變數與運算
課程簡介 u 台大系統訓練班 295 期 u 課程網站 :http://cflin.com/wordpress u 上課時間 :( 一 ),( 四 ) 19:00~22:00 u 給分方式 : 出席 (30%) 作業(70%)
Python 簡介 u Script Program Language u Object-Oriented Program Language u General-Purpose Program Language u Easy to learn u 誰在使用 Python 呢? u Google u 美國太空總署 (NASA) u
Python 簡介 Google 網站的搜尋系統 Youtube 視訊共享服務 BitTorrent 點對點檔案共享系統 NSA 的加密和智能分析 irobot 開發商業機器 吸塵器 NASA Los Alamos Fermilab JPL 的科學程式設計任務 Idustrial Light & Magic Pixar 製作電影動畫
Python 介紹 u 軟體品質 u 可讀性 u 強制縮排 u 物件導向 u 動態語言 u 直譯式的語言 u 增加了使用上的彈性 u 節省重新編譯的時間 u 強類型定義語言 u 強制數據類型定義的語言
Python 介紹 u 豐富的標準函式庫 u 可移植 u 容易擴充和嵌入 u Python 本身非常容易被擴充 u 負載量大的部份, 用 C 語言來寫, 然後用 Python 來引用, 就可以加快速度 u Python 可以嵌在其它程式裡面, 這樣的特性讓 Python 非常有彈性
Python 介紹 創始 為吉多 范羅蘇姆 (Guido van Rossum) 打發聖誕節的無趣, 決 開發 個新的指令碼解釋程式, 作為 ABC 語 的 種繼承 以 BBC 喜劇 Monty Python's Flying Circus 命名 Python 2.0 於 2000 年 10 16 發布, 主要是實作了完整的垃圾回收 (Garbage Collection), 並且 援 Unicode 2008 年 12 3 發布 Python 3.0 它不完全相容之前的 Python 代碼 不過, 很多新特性後來也被移植到舊的 Python 2.6/2.7 版本
Python 的作者 http://en.wikipedia.org/wiki/guido_van_rossum Guido van Rossum 吉多 范羅蘇姆
Python2 或 Python3 Python2.X Python3.X 穩定版本 現在進行式同時也是未來趨勢 version2.7 為最終版本 活絡發展中 較多的第三方函式庫 對初學者較友善 仍有為數眾多的使用者 較少第三方函式庫 2to3.py 3to2.py Brett Cannon, Python 3.3: Trust Me, It's Better than 2.7, PyCon 2013 https://www.youtube.com/watch?v=f_6vdi7ywua
簡介 Python 如何執
模組的存放位置 Window / 安裝 Python 的資料夾 /Lib Linux /usr/lib/python2.x
簡介 安裝 Window Python-3.x.msi Linux 系統本 進 Python 互動直譯器 (for Linux) Python 2.7 以下版本 #python Python 3.x #python3
基本概念 語法特 以冒號 (:) 做為敘述的開始 不必使 分號 (;) 做為結尾 井字號 (#) 做為註解符號, 同 # 字號後的任何字將被忽略 使 tab 鍵做為縮排區塊的依據 不必指定變數型態 (runtime 時才會進 binding)
變數與運算 變數的命名 以英 字 a-z 或 A-Z 或是 _ 為開頭 Ex: first-name false Ex: first_name right Ex: fruit, Fruit Python 關鍵字 刪除變數 del 變數
變數與運算 變數多重設定 Ex: orange, apple = 2, 5 告別許功蓋 Big5 碼的衝碼問題 採 unicode 編碼
簡介 print() 函數功能 print("a","b","c","d") A B C D print("a","b","c","d",sep="") ABCD print("a","b","c","d",sep=" ") A B C D 28
Python 2.x 與 Python 3.x 的差異 print 從陳述式 (statement) 改為函數 (function) from future import print_function print([object, ][, sep=''][, end='n'][, file=sys.stdout]) 27
認識 IDLE 小而實用的 Python 開發環境! 包含了實用的編輯器與 Python 直譯器 ( 互動介面,Python Shell) 自動縮排 語法高亮 提供互動介面 容易學習與測試
認識 IDLE 接下來介紹 IDLE 的各項功能 ü File : 開檔, 關檔, 存檔, 開新視窗 ü Edit : 複製, 貼上, 取代, 尋找, 復原 ü Shell : 重啟 shell ü Debug : 除錯的功能與工具 ü Option : 可以設定 IDLE ü Help : IDLE 幫助與 Python 文件
認識 IDLE 接著我們一步一步來看看 IDLE 的基本功能! 請跟著輸入並觀察結果 ( 不太了解沒關係, 這邊只是體驗!) Part I. Shell Step 1 : 輸入 1+1 Step 2 : 輸入 print( hello world! ) 在 Python Shell 中, >>> 是一個輸入的提示字串我們所有要下給直譯器的命令都要打在 >>> 之後喔
認識 IDLE Part II. A New File(.py) Step 1 : File > New Window Step 3 : File > Save 1. 3. Step 2 : 輸入 print( hello world! ) 2. 4. Step 4 : 存成.py, 按存檔
認識 IDLE Step 5 : 按 F5 或 Run > Run Module, 看看會出現什麼! 出現下面訊息代表成功了! 恭喜你, 踏出學習 Python 的第一步
Python 重要操作指令與快捷鍵 輸入終止符 Unix-Like : Ctrl+D Windows : Ctrl+Z <Enter> IDLE 熱鍵 Alt+p 上一個指令 Alt+n 下一個指令 Tab 指令補完
標記 直譯器利 標記 (token) 解析程式的功能, Python 中的標記有關鍵字 (keyword) 識別字 (identifier) 字 常數 (literal) 運算 (operator) 等四類 關鍵字 識別字 字 常數 運算
關鍵字 關鍵字為具有語法功能的保留字 (reserved word),python 的關鍵字, 如以下列表
識別字 識別字為寫程式時依需求 定義的名稱, 包括變數 (variable) 函數 (function) 類別 (class) 等, 皆為使 定義的識別字 除了關鍵字之外, Python 可 任何 Unicode 編碼的字元當作識別字 習慣上識別字的命名仍是以英 字 寫 A-Z (\u0041-\u005a), 寫 a-z (\u0061-\u007a), 底線符號 (_, \u005f) 與數字 0-9 (\u0030-\u0039) 為主
字 常數 字 常數的意思就是字 上的意義, 也就是說,1234 就代表整數數值 千兩百三 四的意義, 因此, 所謂的字 常數就是直接寫進 Python 程式原始碼的數值, 依資料型態分類有 字串字 常數 (string literal) 字節字 常數 (bytes literal) 整數字 常數 (integer literal) 浮點數字 常數 (floating-point literal) 複數字 常數 (imaginary literal)
運算 Python 提供多樣 功能完整的運算, 如下列表 分隔符號 (delimiter)
變數 (Variables) 和表 式 (Expressions) 表 式 3 + 5 3 + (5 * 4) 3 ** 2 Hello + World 變數指定 a = 4 + 3 b = a * 4.5 c = (a+b)/2.5 a = Hello World 型別是動態的, 會根據指定時的物件來決定型別 變數單純只是物件的名稱, 並不會和記憶體綁在 起 e.q. 和記憶體綁在 起的是物件, 不是物件名稱
關於變數 1/3 為何需要變數? 彈性與保存 變數好比容器 變數的名字 ( 罐子 A) 變數的值 ( 三公升 ) 變數的型態 ( 水 ) 變數要如何命名? 以底線或英文字母開頭字符 以底線, 英文字母和數字為後續字符 不可與關鍵字 ( 保留字 ) 相同
關於變數 2/3 定義變數與初始化變數 Var = 70 ( 整數 ) Var = 6.78 ( 浮點數 ) Var = "alcom lab ( 字串 ) 變數值同時可以看出變數型態 variable name = value 變數名稱必須符合規範 Programmer 撰寫 Python 時不必在意變數的 size( 容器的大小 ), 因為細節早被隱藏
關於變數 3/3 Python 的變數是可以更換型態的 這並非指 Python 沒有型態, 而是同一個變數名稱可以任意指稱裝載任何型態的容器 ( 物件參照 ) 在 Python Shell 中直接輸入變數名稱可看到變數的再現型態
賦值運算 賦值運算是最常被使用的運算 將運算的結果賦予 ( 存到 ) 一個變數, 將右邊運算的結果 ( 右值 ) 賦予左邊 ( 左值 ) left value = right value 等號是賦值運算的運算子, 代表把右邊給予左邊, 跟一般在數學上的意義 相等 是完全不同的
物件參照 1/3 Python 在實作上採取了參照物件的作法 個資料 ( 物件 ) 必須得有 個空間 ( 容器 ) 來保存它, 在許多程式語 中, 變數就是容器的名字, 但在 Python 中, 變數只是 張標籤, 此標籤指出了真正容器之所在, 因 參照了該容器裡 保存的物件 標籤 Python 的變數 參照 真正的容器 ( 空間 ) 物件 ( 資料 )
物件參照 2/3 範例 : 整數變數的賦值 ❶ 5 a 參照 ❷ ❸ kkk 7.890
物件參照 3/3 範例 : a b 參照 參照 10.5 hello a b 參照 參照 6 is : 判斷兩個物件的 id 是否相同 == : 判斷兩個物件的 value 是否相同
變數與物件 Python 中所有東 都是物件 (object), 這是說 Python 裡的資料 (data) 都是物件 凡是物件都有 : (id) 號碼 (type) 型態 (value) 數值 物件的值可以是可變的 (mutable), 或是不可變的 (immutable), 通常這是說複合資料型態 (compound data type) 的元素 (element) 是否可以替換, 例如序對 (tuple) 及字串是不可變的, 串列 (list) 或字典 (dictionary) 是可變的 當物件不再使 時, 直譯器會 動垃圾收集 (garbage collection), 釋放記憶體空間
可變與不可變 1/3 資料型態有分成可變的 (mutable) 與不可變的 (immutable) 指的是變數所參照的物件本身可否改變 不可變資料型態 : 整數, 浮點數, 字串 被自動回收 a 參照 5 6 變數 a 原先參照的物件 : 整數 5 並沒有被改變而是產生了新的整數物件 6 並且將變數 a 重新繫結到物件 6
可變與不可變 2/3 可變資料型態 : 串列, 字典 a 參照 0 1 2 1 a 6 a 參照 0 1 2 3 變數 a 原先參照的串列被改變了, 增加了 個元素 5.1 也改變了第三個元素 7 1 a 5.1 6 7
可變與不可變 3/3 可變的資料型態, 變數指定時會產生新的 id 部分不可變的資料型態, 變數指定時會對應相同的 id a b 參照 參照 [1,2,3] [1,2,3] a b 參照 參照 6
資料型態 整數 int 浮點數 float 複數 complex 字串 str 字節 bytes 字節陣列 bytearray 串列 list 序對 tuple 集合 set 字典 dict
數字型態 u 內建的數字型態 (numeric types) 共有三種 u int 整數 u100 u float 浮點數 u123.45 u complex 複數 u3+4j
數學運算 基本四則運算 : + - * / % 運算特性 : 以複雜者為主且運算精確性有限 Python 所 援的特殊運算 : 次 : 2**10 整商除法 : 10//3
複數運算 c.real 實部 c.imag 虛部
內建序列型態 內建的序列型態 (sequence types) 共有六種 str: 字串 (string), 不可變 (immutable) bytes: 字節 (byte), 不可變 (immutable) bytearray: 字節陣列 (byte array), 可變 (mutable) list: 串列 (list), 可變 (mutable) tuple: 序對 (tuple), 不可變 (immutable) range: 內建函數 range() 回傳的物件 (object), 常 於 for 迴圈 (for loop)
字串 (String) l 字串的特徵為引號, 包含單引號, 雙引號和三引號, 再現時預設以單引號表 l 使 索引位置可以存取元素 l 字串的元素是有序的 ( 誰前誰後有關係 ) l 字串頭尾的引號必須相同對稱 Strings ( 字串 ) a = Hello # Single quotes b = World # Double quotes c = Bob said hey there. # A mix of both d = A triple qouted string can span multiple lines like this e = Also works for double quotes
序列型態 (sequence types) 可進 以下的計算
串列 list 是最實 也最常 的群集 可以收集不同資料型態的元素 list 中的元素允許是 list list 的元素是有序的 ( 誰前誰後有關係 ) list 的特徵是中括號 [ ], 使 索引位置可以存取元素 顯示 list1 的第一個元素 ( 在電腦領域裡計數由零開始 ) 不同型態的資料可以被收集在同一個清單中
串列 (list) 任意物件的串列 a = [2, 3, 4] b = [2, 7, 3.5, Hello ] c = [] d = [2, [a, b]] e = a + b # A list of integer # A mixed list # An empty list # A list containing a list # Join two lists 串列的操作 x = a[1] y = b[1:3] z =d[1][0][2] b[0] = 42 # Get 2nd element (0 is first) # Return a sub-list # Nested lists # Change an element
串列 (list) 型態有以下的 法
序對 (tuple) l l 可以收集不同資料型態的元素 tuple 中的元素允許是 tuple l tuple 的元素是有序的 ( 誰前誰後有關係 ) l l tuple 的特徵是 括號 (), 使 索引位置可以存取元素與 list 類似, 最 的不同 tuple 是 種唯讀且不可變更的資料結構, 不可取代 tuple 中的任意 個元素, 因為它是唯讀不可變更的
序對 (tuple) tuple f = (2,3,4,5) g = () h = (2, [3,4], (10,11,12)) tuple 的操作 x = f[1] y = f[1:3] z = h[1][1] # A tuple of integers # An empty tuple # A tuple containing mixed objects # Element access. x = 3 # Slices. y = (3,4) # Nesting. z = 4
內建集合型態 (set) l 內建的集合型態 (set types) 共有兩種 l l set: 集合, 可變 (mutable) frozenset : 原封集合, 建 後不可新增或刪除元素 (element), 因此為不可變 (immutable) l 集合型態的字 常數使 括弧 { }, 其物件屬於複合資料型態 (compound data type), 也就是說單 集合型態物件可以包含多個元素, 但沒有重複的元素
內建集合型態 (set) l set 的元素是無序的 ( 誰前誰後沒關係 ) 沒有重複的元素, 而且設定時的順序也不影響 set 為可變型態, 所以變數指定時會產生新的 id
集合型態的物件可進 之運算
集合型態物件相對應的 法 由於 set 型態是可變的, 因此有額外兩個新增與刪除元素的 法
內建字典型態 (dict) l 建 字典變數可利 括弧 { }, 裡頭以 key : value 為配對的資料項, 若有多筆資料再以逗號區隔開 l 例如 d1 = { "a":100, "b":200 } 共兩筆資料 key value l 與 list, tuple 不同, 不以索引位置存取元素, 改以 key 當作索引存取元素
內建字典型態 (dict) l 使 字典須注意, key 必須是不可變的 (immutable) 資料型態, 如數字 字串 (string) 等, value 沒有限制 l dict 的元素是無序的 ( 誰前誰後沒關係 )
字典物件可進 的運算
字典物件的 法 (method)
型態轉換 我們在處理資料的時候, 有些資料型別不是我們想要的, 該怎麼處理? 資料型別轉換 : 型別 ( 資料 ) 將 x 轉換為整數 :int(x) 將 x 轉換為浮點數 :float(x) 將 x 轉換為字串 :str(x) 將 x 轉換為布林型別 :bool(x) 型別轉換會在記憶體空間配置出新的物件, 內容為轉換後的結果
動動腦 u num = '1000' #str 字串型態 u 若需要除以 2 運算後得到數字 500 的話怎麼辦? u nums = [1,1,1,2,2,3,4,5] #list 串列型態 u 若需要將重複的元素去除的話怎麼辦? u nums = (10,5,7,1,6,2) #tuple 序對型態 u tuple 並不提供排序的 法, 若要排序 ( 由 到 ) 該怎辦? u 適時的轉換型態可以解決 常多的問題
Homework1 u u 作業格式 u 檔名 :py2xx_ 中 姓名 _hw1.py 繳交 式 u 上傳 課程網 裡 的上傳作業連結 (dropbox)
Homework1 u 作業要求 u Q1. 使 set 型別完成下列問題 : 本班期末考試 u 數學及格的有 : Tom, John, Mary, Jimmy, Sunny, Amy u 英 及格的有 : John, Mary, Tony, Bob, Pony, Tom, Alice u 分別印出數學及格但英 不及格的名單, 數學不及格但英 及格的名單, 兩科都及格的名單 u 最後印出全班總共有幾個同學 u Q2. 使 dict,list 型別完成下列問題 : u Tom 作業成績為 80, 100, 90, 95,John 作業成績為 100,93,75,80 u 請以 dict 型別存放兩個同學的資料 key: 名字,value: 分數列表 (list) u 請分別算出兩位同學的平均分數並且印出
參考 u 官 網站 u https://www.python.org/ u Python code 視覺化網站 u http://www.pythontutor.com/