Python A Comprehensive Programming Language 謝育璘 r03944051@ntu.edu.tw
Guido van Rossum Monty Python's Flying Circus 吉多·范羅蘇姆在荷蘭出生、成長 蒙提·派森的飛行馬戲團 Python的創始人為Guido van Rossum。在1989年聖誕節期間的阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的指令碼解釋程式 Guido van Rossum Monty Python's Flying Circus
直譯 : 不用經過編譯就能執行 .py 程式碼檔(source file) 就是 執行檔(executable file) 不過系統要先安裝好python環境
直譯 : 不用經過編譯就能執行 互動式命令列 interpret.py 為什麼沒有print但是能print出來? 提一下 >>> … 是什麼 互動/執行 interpret.py
Python 版本 Python 2 vs. Python 3? 為什麼用Python 2 許多函式庫尚未完成 Python 3 的移植 更強大更方便的語法 更強大更方便的函式庫 Python 3 是目前官方持續開發(加新功能)的版本。
Python 安裝 Windows Ubuntu Mac https://www.python.org/ sudo apt-get install python2.7 Mac https://docs.python-guide.org/en/latest/starting/install/osx/
The Zen of Python There should be one – and preferably only one – obvious way to do it.
高階語言(比起Java、C++、C) 設計哲學 「優雅」、「明確」、「簡單」 大多東西會符合你的直覺 Python的設計哲學是「優雅」、「明確」、「簡單」。因此其對手Perl語言中「總是有多種方法來做同一件事」的理念在Python開發者中通常是難以忍受的。Python開發者的哲學是「用一種方法,最好是只有一種方法來做一件事」。在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。由於這種設計觀念的差異,Python原始碼通常被認為比Perl具備更好的可讀性,並且能夠支撐大規模的軟體開發。這些準則被稱為Python格言。在Python解釋器內執行import this可以獲得完整的列表。
TIOBE 程式語言排名 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
I/O 基本輸入輸出
基本輸出:print()
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 ) 沒有幫我們把轉成任何 變數型態
基本輸入:input() input() 以 行 為單位 就算 空白行 也是 行 使用者輸入的 input.py Input python 2 python 3 差別 input.py
小知識:python的註解 單行註解:#之後到換行為止都是註解(所以最多註解單行) 多行註解:利用多行字串 ””” … ”””
Built-in DataTypes Number String List Dictionary Set 7, 11.0 ‘Hello World’ [7, 11, ‘store’] {‘name’:’marr’, ‘home’:’taipei’} set([7, 11, ‘store’]) elements elements
int 整數 + 124 - 1246 * /
新增整數變數、四則運算 Elementary arithmetic xx.oo 是什麼? #include<iostream> using namespace std; int main() { string s = "1234"; cout << s.length() << endl; system( "pause" ); }
指定運算子 =
變數交換 變數A要跟變數B交換,C++怎麼做? In Python: A, B = B, A
小知識:型態承受力 整 數 語言 python C/C++ 型態 int long long 記憶體大小 不固定 8 byte 4 byte 數值大小
string 字串 ‘H’ ‘a’ ‘t’ ‘s’ ‘u’ ‘n’ ‘e’ ‘M’ ‘I’ ‘k’
新增字串變數、加乘運算 string operation
易讀多行字串 multi-line string 前後三個 單引號 或 雙引號 C++ 用\n
String
Control Flow 程式流程控制:if、while
Code Indenting No explicit begin or end No curly braces if age > 18: print “You are old enough.” else: print “You are too young.”
if Statements x = int(raw_input("Please enter an integer: ")) if x < 0: x = 0 print 'Negative changed to zero‘ elif x == 0: print 'Zero‘ elif x == 1: print 'Single‘ else: print 'More'
For Statements words = ['cat', 'window', 'defenestrate'] for w in words: print w, len(w), cat 3 window 6 defenestrate 12 range(5, 10) [5, 6, 7, 8, 9] range(0, 10, 3) [0, 3, 6, 9] xrange vs. range for i in xrange(10): print i 0 1 2 3 4 5 6 7 8 9
else, break, continue for n in range(2, 10): for x in range(2, n): if n % x == 0: print n, 'equals', x, '*', n/x break else: print n, 'is a prime number'
else, break, continue for num in range(2, 10): if num % 2 == 0: print "Found an even number", num continue print "Found a number", num
while Statements x = 0 while x < 10: print x, x += 1 0 1 2 3 4 5 6 7 8 9
資料結構:List、Dictionary、Set Data Structure 資料結構:List、Dictionary、Set
List squares = [1, 4, 9, 16, 25] len(squares) 5 squares[-1] 25 squares[-3:] [9, 16, 25] # slicing returns a new list squares[:] [1, 4, 9, 16, 25] # slicing returns a new list squares + [36, 49] [1, 4, 9, 16, 25, 36, 49] squares.append(36) [1, 4, 9, 16, 25, 36] squares[2:3] = [] [1, 4, 25] squares[:] = [] x = [[‘a’, ‘b’, ‘c’], [1, 2, 3]]
Dictionary tel = {'jack': 4098, 'sape': 4139} tel['guido'] = 4127 tel = {'jack': 4098, 'sape': 4139, 'guido': 4127} del tel['sape'] tel = {'jack': 4098, 'guido': 4127} tel.keys() ['guido', 'irv', 'jack'] 'guido' in tel True 字典:以 int、str等hashable的key 儲存 沒有順序關係的value
Set basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana'] fruit = set(basket) # create a set without duplicates 'orange' in fruit True a = set('abracadabra') set(['a', 'r', 'b', 'c', 'd']) a = set('abc') b = set('ade') a – b set(['c', 'b']) a | b set(['a', 'c', 'b', 'e', 'd']) a & b set(['a']) a ^ b set(['c', 'b', 'e', 'd'])
function 函式(函數)
Function Example def myFunc(a, b, c): “”” document strings x = a + 1 y = b + 2 z = C + 3 return x, y, z 可以回傳多個變數
File Handling fileobj = open(“myfile”, “r”) lines = fileobj.readlines() for line in lines: print line
hw1 輸入若干n個數字,輸出指定第k大的數字。如果k=0就結束程式。 Sample input: 6 8 15 29 35 47 77 3 2 4 1 0 Sample output: 第3大的數字是 35 第2大的數字是 47 第4大的數字是 29 第1大的數字是 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.
python 與 C 的差異 不用打; input/print 預設是以整行為單位 變數不用宣告 變數名稱沒有綁住型態 while / if 用: 結尾 while / if 用縮排排版 else if 變成 elif 沒有i++ / i-- ,要用 i += 1 / i -= 1 動畫: 一次只秀一列 左右連起來
THE END 課堂有限,學海無涯。 自學才是王道!
參考資料與延伸學習 Python官方教學,http://docs.python.org/3/tutorial/index.html Mark Lutz《Python 學習手冊》 OpenFoundry 活動,http://www.openfoundry.org/tw/activities Codecademy,http://www.codecademy.com Wiki條目《Python》,http://zh.wikipedia.org/wiki/Python TIOBE,http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 今天最重要就這一頁 自學可以學得比較多