知識社群ePortfolio登入
Python - 十分鐘入門
by 王敦正, 2015-12-01 08:39, 人氣(628)

開始囉!!(本篇引述來自http://tech.marsw.tw/blog/  ITRY | MARSW)

安裝程式  (本篇以2.7.10版本為例)

     Windows:官網下載2.7.x版本或最新版本3.5.x。在環境變數加上C:\Python27;C:\Python27\Scripts(如下圖)

     Mac 內建2.7.5

     Unix:內建3.x

     OnlineKoding

 

執行第一個程式Hello World

有兩種選擇:

     直接開啟直譯器上輸入一行行程式碼,Enter執行

o    Windows:開啟Python(command line)

o    Mac/Unix:Terminal輸入python -輸入print "Hello World"

     跟以往一樣寫一個.py的檔案,執行python my_first_python.py

my_first_python.py

# encoding: utf-8

 

print "Hello World"

!!!注意中文的檔案要加上# encoding: utf-8

WINDOWS

MAC/UNIX

 

//2014-10-20補充

網路上看到一張圖片大約40行的code也可以很清楚的供有程式基礎的人快速了解Python 簡中對照版

(http://wiki.woodpecker.org.cn/moin/ZqQuickIntoPy?action=AttachFile&do=view&target=120417-coffeeghost-q-in-py.png)

之後的部分,會更詳細介紹Python好用的功能,將以.py的檔案形式展示程式碼。

 

[語法]

python不需要任何代表結尾的符號(ex;)

python不需要先指定變數的型態,之後也可以任意轉換型態

python可以透過=,+=,-=直接賦值,也可同時給多個變數賦值

單行註解為#,多行註解則用"""開頭與結尾,多運用註解可以幫助你或其他人看懂你的程式碼。

# encoding: utf-8

 

"""

這是一個簡單的python程式

介紹基本的語法

"""

x = 3

x += 2

x -= 1

print x

x,y = 99.99,5

print x,y

Output:

4

99.99 5

 

[數據類型]

list是可以隨意更動大小的陣列,可透過append增加。

pythonlist提供很多好用函式:

     len()可以算list長度

     sum()可以計算list中所有數值的加總(list中的元素都需為數值,不可與字串混合)

     count則是可以計算list中某個元素出現次數

# encoding: utf-8

 

my_list = []

my_list.append(1)

my_list.append(2)

my_list2 = [55.55,"Hi",3,99,222,222]

my_list2[0]=333.333

 

print len(my_list),sum(my_list),my_list2.count(222)

print my_list2[0],my_list2[-1],my_list2[1:3],my_list2[2:] 

Output:

2 3 2

333.333 222 ['Hi', 3] [3, 99, 222, 222]

dictionary像是hash-table一樣有一個key對應一個變數

# encoding: utf-8

 

passwd={'Mars':00000,'Mark':56680}

passwd['Happy']=9999    

passwd['Smile']=123456

 

del passwd['Mars']

passwd['Mark']=passwd['Mark']+1

 

print passwd

print passwd.keys()

print passwd.get('Tony')

Output:

{'Happy': 9999, 'Smile': 123456, 'Mark': 56681}

['Happy', 'Smile', 'Mark']

None

set則是集合,可以進行聯集、交集、差集等運算

# encoding: utf-8

 

admins = set()

users = {'Smile', 'Tony','Happy','Sherry','Allen','Andy', 'Mars'}

admins.add('ihc')

admins.add('Mars')

 

print admins & users

print admins | users

print admins ^ users

print admins - users  

print users - admins  

Output:

set(['Mars'])

set(['Allen', 'Andy', 'Smile', 'Mars', 'Tony', 'ihc', 'Happy', 'Sherry'])

set(['Andy', 'Allen', 'Tony', 'Smile', 'Happy', 'ihc', 'Sherry'])

set(['ihc'])

set(['Sherry', 'Andy', 'Allen', 'Tony', 'Smile', 'Happy'])

 

[字串]

字串可用雙引號"或用單引號'來進行標示

# encoding: utf-8

 

s = "Hello" 

s += 'World'

s1 = "HelloWorld".replace("ll","1")

s2 = "Hello"[0]+"i"

print s,s1,s2,len(s)

Output:

HelloWorld He1oWorld Hi 10

其中python字串內建的分割函式string.split()很好用,可以將字串依指定的字元(字串)切割

s3 = "This is a sentence."

s3_split=s3.split(' ')

print s3_split

Output:

['This', 'is', 'a', 'sentence.']

而中文的處理,我們可以透過unicode的編解碼來處理

# encoding: utf-8

 

s="台灣"

u = s.decode('utf8')

 

print '',s[0],u[0]

print u[0]==u''

Output:

 ?  #沒有解碼過的s是顯示不出來每一個"中文字"

True

 

[型別轉換、基本運算符]

要注意的是,由於python不用特別宣告變數,要注意不能讓不同型別的變數同時運算

ex: x+s會出錯,因為整數型態與字串型態,兩者是不能同時運算的

# encoding: utf-8

 

x=2**3

y=3/2

s="3"

print ord('a'),ord('c'),chr(ord('a')+2)

print y,int(s)/2,float(s)/2,3%2

print str(x+y),str(x)+str(y)

Output:

97 99 c

1 1 1.5 1

9 81

 

[Flow Control:判斷式、迴圈]

再來就進入到程式設計中很重要的部分:流程控制

也可以從這部分開始看到Python之所以容易閱讀的原因,

每個流程的結尾是用冒號:

屬於該流程底下的執行動作不需要任何括號,而是使用縮排

縮排可以使用Tab或四格Space,但不可混用,建議是把編輯器設定成Tab對應四格空白

縮排可以讓程式碼更容易閱讀,了解整個程式的架構&邏輯,也是寫程式重要的習慣之一。

python的判斷式中,and,or,not是邏輯運算子。

python提供一個很好的函式range,範圍是左邊數字到右邊數字-1,在撰寫迴圈時可以更加快速。

另外in函式可以用來判斷某個型別中是否有某個元素,非常的方便!

# encoding: utf-8

 

my_list=[]

for i in range(0,10):  """//for(i=0;i<10;i++)"""

    my_list.append(i+1)

if my_list[0]==1 and len(my_list)<10:

    my_list[0]+=1

    print "1 state"

elif (10 in my_list) or not(len(my_list)==10):

    print "2 state"

    print "range(i,j) is i~j-1"

else:

    print "3 state" 

    print "none of above"

 

for i in my_list:      """//for(i=0;i<my_list.length();i++)"""

    print i,          """//cout<<my_list[i]"""

print

Output:

2 state

range(i,j) is i~j-1

1 2 3 4 5 6 7 8 9 10

[自定義函式Function]

python定義函式用def開頭,同樣以冒號:結尾,還有縮排。

def my_function(x,y):

    return x-10,y+10

x,y = my_function(10,20)

print x,y

Output:

0 30

 

[類別Class]

Class的初始化函式是由兩條底線包含著init做宣告。

# encoding: utf-8

 

class Student: 

    def __init__(self, name, grade, age): 

        self.name = name 

        self.grade = grade 

        self.age = age 

    def set_name(self, name): 

        self.name = name 

 

student_objects=[]

student_objects.append( Student('john', 'B', 15) )

student_objects.append( Student('dave', 'A', 12) )

student_objects.append( Student('jane', 'A', 10) )

student_objects[0].set_name('John')

 

for i in student_objects:

    print i.name,i.grade,i.age

Output:

John B 15

dave A 12

jane A 10

 

[導入外部資源import]

可以用import直接導入整個python檔中所有的函式

或是用from檔案import函式,插入特定的函式

# encoding: utf-8

 

import sys """插入sys檔案中所有函式,使用sys檔中的write函式前須加檔名"""

from time import time """time檔案插入time()函式,使用time()前不需要加檔名"""

sys.stdout.write( str(time()) + "\n" )

Output:

1409796132.99 #當下的time

 

[I/O]

前例中已經看到很多使用printOutput的案例

print預設是印每一行就會加一個換行,要使用,才會在每次印出之間以空格取代

要更自由一點,可以使用library中的write函式。

# encoding: utf-8

 

import sys

file_in = file('db.txt','r')

file_out = file('copy.txt','w')

for line in file_in:

    for i in range(0,len(line)):

        if line[i]!="\n":

            sys.stdout.write(line[i]+',')

        else:

            sys.stdout.write(line[i])

        file_out.write(line[i])

 

sys.stdout.write("\n")

file_in.close()

file_out.close()

"""

# db.txt

1111

2222

ssss

wwww

5555

"""

Output:

1,1,1,1,

2,2,2,2,

s,s,s,s,

w,w,w,w,

5,5,5,5,

copy.txt內容和db.txt一樣。

[例外處理 Exceptions Handling]

# encoding: utf-8

 

def my_divide():

    try:

        10 / 0 #會讓程式出錯,所以需要特別handle

 

    except ZeroDivisionError:

        print "不能除以0!!!"

    else:

        print "沒有任何錯誤"

    finally:

        print "無論有沒有例外都會執行這一行"

my_divide()

Output:

不能除以0!!!

無論有沒有例外都會執行這一行

 

[排序]

排序是用程式處理資料中最常用到功能,python提供了很方便的sort函式

lambda是簡易型函式,只能回傳一個值,因此如果需要兩個值以上的排列順序,會用attrgetter

# encoding: utf-8

 

class Student: 

    def __init__(self, name, grade, age): 

        self.name = name 

        self.grade = grade 

        self.age = age 

    def set_name(self, name): 

        self.name = name 

 

student_objects=[]

student_objects.append( Student('john', 'B', 15) )

student_objects.append( Student('dave', 'A', 12) )

student_objects.append( Student('jane', 'A', 10) )

 

student_objects.sort(key=lambda i: i.grade)

for i in student_objects:

    print i.name,i.grade,i.age

print

 

from operator import attrgetter

 

student_objects.sort(key=attrgetter('grade', 'age'),reverse=True) 

for i in student_objects:

    print i.name,i.grade,i.age

print

Output:

dave A 12

jane A 10

john B 15

john B 15

dave A 12

jane A 10

________________________________________

以上介紹包含了一些最常用到的python功能,給想快速轉換python的人一個入門文章。

What's Next?

有了以前學C的基礎後,其實後來要碰任何程式語言都很快,

最快學習的方法都是「動手做」一個Project,邊做邊google該語言的程式語法

之後再從頭開始「看文件」,從官網或是書上一步步把該程式語言的基礎打好

動手做

 

提供一些遊戲化的關卡來當作練習

     CheckiO 一個以連環故事為主題的的Online Judge網站。

     The Python Challenge 根據提示解出下一關網址的闖關遊戲,借此練習Python技巧。

     Sikuli - 程式語言大革命!用圖片寫程式! 利用Sikuli可以設計出好玩的自動化程式

 

看文件

     Python Tutorial 第一堂(1)揭開序幕 很完整的中文教學

     Learn Python The Hard Way 英文經典教材

     Invent with Python 透過開發遊戲學習Python