2015年8月20日 星期四

給程式設計師的快速 Python 入門

 

按步就班的 Python 學習資源琳瑯滿目,無論是網路上或是書店的書,大家有空可以詳閱,本篇目標是以「一支程式」,讓有程式底子的人可以馬上執行看結果,trace一遍code就能大致了解python的寫法:)

這個網站寫的很好,我把他的範例整合成一個檔案,方便大家學習
Python - 十分鐘入門:http://tech.marsw.tw/blog/2014/09/03/getting-started-with-python-in-ten-minute

把下面這份code直接複製貼到.py檔下,再執行該檔案即可!



# 快速使用python的方法
# 1. 安裝:sudo apt-get install python3.4
# 2. 在terminal輸入python即可進入互動式python shell模式
# 3. 創一個xxx.py的檔案,使用python xxx.py執行,在vim下以w !python3.4執行
#   單行註解
"""
    多行註解
"""

import os




def HelloWorld():

    # 尋覓最初的感動,Hello world!

    print("Hello World!")

def Assignment():

    # n不需要任何代表結尾的符號(ex;)
    #
    # python是動態語言但是也是強定型語言!
    # 需要先指定變數的型態,之後也可以任意轉換型態,但不會幫程序員預判型態

    print('*a. assign*\n')

    x = 3
    x += 2
    x -= 1
    print(x)
    x,y = 99,99.5
    print(x,y,'\n'*2)

def List():

    # list是可以隨意更動大小的陣列,可透過append增加。
    #    - len()可以算list長度
    #    - sum()可以計算list中所有數值的加總(但list中的元素都需為數值,不可與字串混合)
    #    - count則是可以計算list中某個元素出現次數

    print('*b. 清單 List*\n')

    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:])

def Dictionary():

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

    print('*c. 字典 dictionary (hash table)*\n')
    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'),'\n'*2)

def Set():

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

    print('*d. 集合 set*\n')

    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, '\n'*2)

def String():

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

    print('*e. 字串 string*\n')

    s = "Hello"
    s += 'World'
    s1 = "HelloWorld".replace("ll","1")
    s2 = "Hello"[0]+"i"
    print(s,s1,s2,len(s))

    ###

    s3 = "This is a sentence."
    s3_split=s3.split(' ')
    print(s3_split)

    ###

    #在python3中已經不用再做中文編碼的轉換

    s="台灣"
    print(s,'\n'*2)

def ChangeType():

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

    print('*f. 型別轉換、基本運算符*\n')

    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),'\n'*2)

def FlowControl():

    # 每個流程的結尾是用冒號:
    # 屬於該流程底下的執行動作不需要任何括號,而是使用縮排
    # 縮排可以使用Tab或四格Space,但不可混用,建議是把編輯器設定成Tab對應四格空白

    # python提供一個很好的函式range,範圍是左邊數字到右邊數字-1,在撰寫迴圈時可以更加快速。
    # 另外in函式可以用來判斷某個型別中是否有某個元素,非常的方便!

    print('*g. 流程控制 flow control*\n')

    my_list=[]
    for i in range(0,10):  # for(i=0;i<10;i++)
        my_list.append(i)

    for i in my_list:      # for(i=0;i<my_list.length();i++)
       print(i, end = " ")   #     cout<<my_list[i]
    print('\n')

    ###

    if my_list[0]==1 and len(my_list)<10:
        print ('1 state')
    elif (9 in my_list) or not(len(my_list)==10):
        print ('2 state')
    else:
        print('none of above')

    print('')

    ###

    sum = 0
    i = 1
    while i <= 100:
        sum += i
        i += 1

    print("1 + 2 + 3 + ... + 98 + 99 + 100 =", sum)
    print('\n'*2)

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

def ClassTest():

    print('*h. 類別 Class*\n')

    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)
    print('\n'*2)

def Import():

    print('*i. 導入資源 Import*\n')

    import sys #插入sys檔案中所有函式,使用sys檔中的write函式前須加檔名
    from time import time #從time檔案插入time()函式,使用time()前不需要加檔名

    sys.stdout.write( "目前時間:"+ str(time()) + "\n" ) #目前時間

    print('\n'*2)

def IO():

    print('*j. 讀檔寫檔 IO*\n')

    import sys

    file_in  = open('db.txt','r')
    file_out = open('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
    """

def DivideZero():
    try :
        print('*k. 例外處理 Exceptions Handling*\n')
        10 / 0
    except ZeroDivisionError:
        print("CANNOT DIVIDE ZERO!")
    else:
        print("good!")
    finally:
        print("created a try-catch ")
        print('\n'*2)

def main():

    HelloWorld()
    Assignment()
    List()
    Dictionary()
    Set()
    String()
    ChangeType()
    FlowControl()
    ClassTest()
    Import()
    #IO() #please create target txt file first
    DivideZero()

# 在程式碼結束的地方呼叫main(), 且僅在我們直接運行此程式時
# __name__才會是__main__, 在其他程式碼import時不會顯示
# 因此, 一邊這裡是放置測試的地方

if __name__ == '__main__':
        main()


最後附上一個小抄幫助記憶!





References

Python - 十分鐘入門
http://tech.marsw.tw/blog/2014/09/03/getting-started-with-python-in-ten-minute

Python cheat sheet
http://www.addedbytes.com/cheat-sheets/python-cheat-sheet/






技術提供:Blogger.