to b /r / 劉雨鑫 from C++ 1
2
3
4
你是否想知道 眾多程式設計師口中優雅的語言 5 志玲姐姐
6
第一印象 Python 才有的東西 7
直譯 : 不用經過編譯就能執行 .py 程式碼檔 (source file) 就是 執行檔 (executable file) 不過系統要先安裝好 python 環境 8
直譯 : 不用經過編譯就能執行 互動式命令列 9 interpret.py
int 就支援大數 10 big_number.py
易讀多行字串 multi-line string 11 前後三個 單引號 或 雙引號 multiline_string.py
更易懂的條件式 12 兩種都可以喔 conditional_statement.py
即時反應錯誤 13 沒有給初始值 就拿來運算 把 str 當 int 用 error_report.py
支援中文變數 14 背影.py
一行 http server python -m http.server 15
Python 簡介 歷史、哲學、應用 16 Chapter02_introduction
簡介 python 是體型一般較龐大的無毒蛇類 1989 年的聖誕節期間,吉多 · 范羅蘇姆為了 在阿姆斯特丹打發時間,決心開發一個新的腳 本解釋程式, python 就此誕生吉多 · 范羅蘇姆阿姆斯特丹 目前版本 / Python 的官方直譯器是 Cpython ,該直譯器 用 C 語言編寫,是一個由社群驅動的自由軟體, 目前由 Python 軟體基金會管理 吉多 · 范羅蘇姆 17
設計哲學 「優雅」、「明確」、「簡單」 高 階語言(比起 Java 、 C++ 、 C ) 18
TIOBE 程式語言排名 來源: 19
20 TIOBE 程式語言排名
應用範圍 以下這些都在內部 大量地 使用 Python 21
你學 python 可以 … 開發任何程式 快速寫出範本程式;如果速度要快,再用 C 寫 強大的計算機 寫出跟虛擬碼 (pseudo code) 很像的 code HP code wars 變成大蟒蛇 And so on… 22
計算機 vs 手算數學 好用 vs 考試用 23
環境安裝、設定 for windows7 24 Chapter03_setup
環境安裝、設定:概要 1. 安裝 python 2. 安裝 notepad++ 3. 設定 notepad++ 4. 設定環境變數 PATH 本體 萬用編輯器 命令列 25
1. 安裝 python 下載安裝檔 例: python msi 下一步安裝法 :D 26
2. 安裝 notepad++ (optional) 下載安裝檔 例: Notepad++ Installer Notepad++ Installer 依然下一步安裝法 :3 27
2+. 設定 notepad++ (recommend) 解決編碼問題,支援所有語言文字 28
2+. 設定 notepad++ (optional) 、 是 python code 重要的一部分 29
4. 設定環境變數 PATH (part1) 從 cmd 進入 Python 前,要先讓系統「認得」 ”python” 在哪,因此要設定「 PATH 」 30
4. 設定環境變數 PATH (part2) PATH 的值 (value) 設定為 python 安裝資料夾,目前是 C:\Python33 記得跟你資料 夾名稱一樣 31
HelloWorld 開始 cmd python print(“HelloWorld”) 32
互動式命令列 cmd 輸入 python 或 py ,進入 Python 的「互動式命令列」 離開互動式命令列:輸入 exit() 或 ctrl+Z 互動式命令列 就是 一個良好的 python 測試環境 也可以當作強大的計算機 33
執行程式:拖進 cmd 真正要寫程式,還是會將程式碼存成.py 檔,再一口氣執行 (系統要先安裝 python ,才能直接執行.py ) 為了在程式遇到錯誤跳出時,仍可以看到完整的錯誤訊息 我們可以用拖曳的方式,在 cmd 裡執行.py 檔 (建議路徑不要包括英文以外的字元) 34
Practice (optional) 35 trial.py
I/O input() / print() 36
基本輸出: print() 37 print.py
小知識: help() 38 直接在 互動式命令列 查詢函式的用法
Python vs C :輸入的不同 In C : scanf(“%d”,&a); scanf(“%f”,&a); scanf(“%s”,&a); 代表什麼? a 是 int / float / string 的行為會一樣嗎? 其實 C 有幫我們把 輸入的 string 轉成 變數的型態 In Python : python 的輸入 input() input() 是一個 函式,有 回傳值 (就是 輸入的 string ) 沒有幫我們把轉成任何 變數型態 39
基本輸入: input() 40 使用者輸入的 input.py input() 以 行 為單位 就算 空白行 也是 行
int 整數 41 Chapter05_int * * / /
Python class ‘int’ + - * / // % ** 42 int __add__ __sub__ __mul__ __div__ __floordiv__ __mod__ __pow__
新增整數變數、四則運算 Elementary arithmetic 43 Elementary_arithmetic.py
小知識: python 的註解 單行註解: # 之後到換行為止都是註解(所以最多註解單行) 多行註解:利用多行字串 ””” … ””” 44 comment.py
指定運算子 = 45 Assignment_operator.py
變數交換 變數 A 要跟變數 B 交換, C++ 怎麼做? In Python : A, B = B, A 46 swap.py
小知識:型態承受力 47 整數整數 語言 pythonC/C++ 型態 intlong int 記憶體大小不固定 8 byte4 byte 數值大小不固定
練習:銀行計息 deposit 48 deposit.py
string 字串 49 Chapter06_string ‘H’‘a’‘t’‘s’‘u’‘n’‘e’‘M’‘I’‘k’‘u’
Python class ‘str’ + * len( ) [ ] 50 str __add__ __mul__ __len__ __getitem__
新增字串變數、加乘運算 string operation 51 string_operations.py
易讀多行字串 multi-line string 52 前後三個 單引號 或 雙引號 multiline_string.py
藉由 input 得到 string love announcement 53 love_anouncement.py
取得字串長度 len() 、取出其中一字 [ ] 54 str_getitem.py / str_getitem.cpp 對 ASCII 以外不友善 完整支援中文
跑一遍整個字串 55 str_join.py 怎麼做?
Control Flow 程式流程控制: if 、 while 56 Chapter07_ControlFlow 開始 結束 成績 >=60 ? 輸出 ” 合格 ” 讀取成績 輸出 ” 當掉 ” 回報結果
何謂好的排版? 57 讓人看起來舒服,層次分明的就是好排版 秘訣:每個區塊都有一條神聖不可侵犯的對齊線 99_bad.cpp / 99.cpp
九九乘法表 py / 99.cpp
59 區塊 0 開頭 條件 列: 區塊 1 開頭 條件 列: 區塊 2 區塊 0 開頭 ( 條件 ) 列 { 區塊 1 } 開頭 ( 條件 ) 列 { 區塊 2 } 區塊 1 if/while pythonC/C++ elifelse if Truetrue Falsefalse and&& or|| not! 流程差異對照表 保留字對照 使用 、 對齊吧
list 串列 60 Chapter08_list L[0]L[1]L[2] ‘ 成功巴士 ’ L[3]L[4] 20.8 ‘297’
Python 串列 (list) vs C/C++ 陣列 (array) A[0]A[1]A[2]A[3]A[4] int A[5]; L[0]L[1]L[2] L = [ ‘ 成功巴士 ’, 265, 15 ] ‘ 成功巴士 ’ L[3]L[4] 20.8 ‘297’ 綁定型態 長度固定 不綁型態 長度可變 + [ 20.8, ‘297’ ]
Python class ‘list’ 62 像是 C++ 的陣列加強版:每一格可以塞任何種類的變數、長度可以任意延伸 + * len( ) [ ] list __add__ __mul__ __len__ __getitem__
功能都很直覺 63 len( )[ ]+* Q:如何做到 C++ 的 int a[50]; A: a = [0] * 50 list_op.py
取出子部分 C++ 當中,我們該怎麼印出陣列 A 第 3~7 格的元素? for( int i=3 ; i<8 ; i++ ){ cout << A[i] << endl; … } In Python A[3:8] 64
取出子部分 [ : ] 65 [ a:b ] 可以讓我們取出 str 或 list 從 第 a( 包括 ) 個元素 開始到 第 b( 不包括 ) 個元素 的子部分 省略的話, 會幫你補上 開頭或結尾
dict 字典 66 Chapter09_dict 123 ‘ 雙十 ’ 1010 ‘ 萌節 ’ ‘ 自由日 ’ 1225 ‘ 聖誕節 ’ keyvalue
Python class ‘dict’ 67 字典:以 int 、 str 等 hashable 的 key 儲存 沒有順序關係的 value len( ) [ ] dict __len__ __getitem__
新增字典、取用 68 紅藍都是新增的方法 注意: 101 是 int ‘ 成功高中 ’ 是 str dict.py
del : 刪除元素 69 適用於 list 、 dict… dict list del.py
for :將所有的子元素拿出來一次 70 for 子元素 in 元素集合: 區塊 1
for :將所有的子元素拿出來一次 71 元素集合: str 、 list 、 dict… dict list str 照順序 順序難以捉模 拿出來的是 key for.py
function 函式(函數) 72 Chapter10_function 電費計算系統 (函式) 電費計算系統 (函式) 電表度數(傳入值) 電費(回傳值)
定義函式 73 def 函式名稱 ( 參數 1, 參數 2, 參數 3… ) : do anything you want return 回傳值 1, 回傳值 2… 沒錯!可以 回傳多個變數 回傳型態 函式名稱 ( 參數型態 1 參數 1, 參數型態 2 參數 2, … ){ do anything you want return 回傳值 ; }
費波那西數列: 1, 1, 2, 3, 5, 8, 13… 74 fib.py
小排序:多個回傳值 75 sort.py
Homework 76 Practice
hw1 輸入若干 n 個數字,輸出指定第 k 大的數字。如果 k=0 就結束程式。 Sample input: Sample output: 第 3 大的數字是 35 第 2 大的數字是 47 第 4 大的數字是 29 第 1 大的數字是 77 Hint: 1.array 2.What we mentioned in class. 77
hw2 寫一個 python 程式來判斷輸入字串有沒有雙回文。 ( 回文 : aba / a)( 輸入字串不會有空白 ) ( 是不是兩個回文字串黏在一起 ) Sample input:abcbaacca Sample output: yes, abcbaacca = abcba + acca Sample input:abcbaca Sample output:no, abcbaca is not a double palindrome Hint: 1.Write a function to determine whether an input string is a palindrome. 2.What we mentioned in class. 78
C 到 python 一眼看去 不用打 ; scanf / printf 變成 input / print 變數不用宣告 變數名稱沒有綁住型態 while / if 的 ( ) 變成 : while / if 的 { } 改為用排版 else if 變成 elif true / false 變成 True / False 沒有 i++ / i-- for 有別的用途 input / print 預設是以整行為單位 強迫你排版好看 ! 請用 i+=1 / i-=1 79
學測分發: function 也可當變數傳 80 ability_exam.py
math 函式庫 math 函式庫的用法都是 math. 函數名稱 ( 引數 ) ,使用上非常的簡單,唯一需要 注意的就是引入的型態必須要是正確的數值型態。 常用的函式有:開根號 math.sqrt 、三角函數 math.sin, math.cos…… 、對數 math.log, math.log10…… 81
參考資料與延伸學習 Python 官方教學, Python 官方函式庫, Mark Lutz 《 Python 學習手冊》 台大資訊營 python 講義 by 姜姜 OpenFoundry 活動, 雪凡與好朋友們的 Ren'Py 遊戲引擎初學心得提示 Codecademy , Wiki 條目《 Python 》, TIOBE , 黃佑仁 b 成功高中實習中 Google “Python3 教學 ” 、 “Python3 tutorial” 、 ” 雪凡與好朋友 …” ! 82
THE END 課堂有限,學海無涯。 自學才是王道! 83
Bonus: Linux 工作站的一些用法 Connention: Pietty Fileupload: Filezilla(Client) Information sftp://linux6.csie.ntu.edu.tw 權限與資料夾命名 /.foldername/ 84