曾子易的學習歷程檔案 - 111-1 人工智慧 AI - 0. Python 入門


歷程檔案 Portfolio

    0. Python 入門

    前言

    Python堪稱是大數據與AI時代的最重要程式語言,在資料處理上有著非常重要的地位。而隨著AI的興起,讓傳統的零售業、金融業、製造業、旅遊業,以及政府都爭相投入,無不希望能運用數據分析與預測來協助決策方向,也讓新興的數據分析師、資料分析師成為熱門職業,因此本課程將講解如何使用網絡爬蟲技術以掌握資料爬取分析、視覺化呈現,以及儲存交換應用的關鍵技術。

    Python資料處理的三大技術分別是:擷取分析、視覺化呈現與儲存應用。
    而其應用的範疇包括:網路爬蟲、資料正規化、資料視覺化、資料儲存與讀取(CSV、Excel、Google試算表、SQLite、MySQL)、批次檔案下載、公開資料應用、API建立、驗證碼辨識。

    Python大數據分析最重要的四個模組

    1.Python大數據分析最重要的四個模組
    Python資料分析最重要的四個模組:pandas、numpy、scipy、matplotlib。

    (1)pandas:是基於numpy的資料分析工具,能夠快速的處理結構化資料的大量資料結構和函數。
    pandas模組應該是python用來進行一般日常的大數據分析,最重要的模組了。
    因為pandas的DataFrame資料結構,可以快速的互通於所有的二維結構資料,包括『excel,csv,json,xml,mysql,任何的資料庫,網頁的表格資料,字典dict,二維串列list』
    也就是pandas的DataFrame資料結構,可以與它們之間互相簡易的存取。
    然後再根據DataFrame來進行想要的大數據分析,它提供內建的演算法與資料結構,能夠用一個指令,就可以進行二維資料的『排序,篩選,關鍵字查詢,任意區間範圍查詢,統計學計算,平均值,變異數,標準差,字串檢索,字串取代,欄位樞紐分析、小記、欄位加總,把二維資料任意方式圖形視覺化顯示』
    而建立pandas的DataFrame資料結構,有兩種方式,可以用column的方式來輸入資料,也可以用row的方式來輸入資料。
    所以pandas是大數據分析,非常實用的利器工具,是python資料分析的首選。

    (2)Numpy: Numpy專門用來處理矩陣,它的運算效率比列表list串列更高效。
    Numpy是Python進行專業的數值計算之重要模組,因為大多數提供科學計算的包都是用numPy的陣列作為構建基礎,因此在進行高等數學計算時,numpy就是大數據分析的最重要工具了,因為高等數學運算,都是以矩陣的方式來進行運算,例如人工智慧,機器學習,深度學習,類神經網路計算等。

    (3)sscipy:是基於numpy的科學計算包,包括統計、線性代數等工具。

    (4)matplotlib:是最流行的用於繪製資料圖表的 Python 庫
    也可以結合pandas模組來繪圖。
     

    執行python的四種方法(建議用Anaconda,或colaboratory)

    1.執行python的四種方法(建議用Anaconda,或colaboratory):
    一、方法1:安裝python單純的python
    缺點:功能陽春,沒有太多的模組,無法馬上寫大數據分析程式。
    安裝網址:python官網下載

    二、方法2:安裝Anaconda(**推薦)
    優點:會同時安裝python、1000多種數學繪圖模組、Spyder編輯器,能夠支援大數據分析。
    缺點:會安裝了很多你用不到的模組,浪費硬碟空間。
    安裝網址:到Anacond官網下載安裝

    三、方法3:使用python官網線上shell
    使用repl線上python

    四、方法4:免安裝的colaboratory(**推薦)
    (1)特色:Colaboratory (簡稱為「Colab」) 可在瀏覽器上撰寫及執行Python
    (2)使用方法:到google雲端硬碟→新增→連結更多應用程式→colaboratory
    Chp1. 輸入與輸出

    範例2-1:輸出

    1.輸出指令:print('how are you')
    print('你好\t歡迎\n光臨')
    \t:跳格對齊
    \n:換行

    輸入

    2.輸入指令:input('your name?')

    範例2-2

    範例2-2:
    n = input('請問你的姓名?')
    y = int(input('請問你的年紀?'))
    h = float(input('請問你的身高?'))
    print(n,',你好')
    print('你今年',y,'歲')
    print('你身高',h,'公分')

    註解符號

    pyhon註解符號:#

    pyhon程式結尾不需要;

    pyhon程式結尾不需要;

    print在3.X被改為函式

    print在3.X被改為函式,所以需要()
    print('abc')

    範例2-3:print多個變數

    範例2-3:print多個變數
    fruit = 'apple'
    price = 30
    print('水果=',fruit,',價錢=',price)

    範例2-4:print的分隔字元設定sep,與結束字元設定end

    範例2-4:print的分隔字元設定sep,與結束字元設定end
    sep 預設值 = ' ',空白字元(間隔一個空白格)
    end 預設值 = '\n',換新行字元

    fruit = 'apple'
    price = 30
    print('水果=',fruit)
    print('價錢=',price)
    print('水果=',fruit,sep='\t',end='')
    print('價錢=',price,sep='\t',end='')

    範例2-5:print的格式化輸出%s,%d,%f

    範例2-5:print的格式化輸出%s,%d,%f
    %s文字,%d整數,%f浮點數
    %6.2f = 小數點2位,共6個數字
    %8s = 總共8個字元輸出
    公式:print("格式輸出項目" % (變數))

    fruit = 'apple'
    price = 30
    print("%s 的價錢為 %f" % (fruit, price))
    print("%8s 的價錢為 %6.2f" % (fruit, price))

    Chp2. 變數,數字的運算,資料型別
         
    上課練習範例2-12-22-32-4

    pyhon變數不需要宣告

    pyhon的變數不需要宣告,即可以使用,系統會根據指定值來設定變數型態
    a = 5
    b = "apple"

    變數設定值可以多個變數一起設定

    pyhon的變數設定值,可以多個值在一行一起設定:
    a = b = c = 5
    name,price = "apple",30 
     

    變數名稱不可設定成這些保留字

    pyhon變數名稱不可設定成這些保留字:
    False,None,True,and,as,assert,break,class,continue,def,del,elif,else,except,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,or,pass,raise,return,try,while,with,yield

    pyhon 3.x版本的變數支援中文名稱

    pyhon 3.x版本的變數支援中文名稱
    但最好不要用中文變數名稱
     

    pyhon 脫逸字元,跳脫字元

    pyhon 脫逸字元,跳脫字元有下列幾個\:
    \\ = 反斜線
    \' = 單引號
    \" = 雙引號
    \a = 鈴聲
    \b = 倒退
    \f = 換頁
    \n = 換列
    \r = 返回
    \t = 水平跳格
    \v = 垂直跳格
    \N{id} = Unicode資料庫ID
    \uhhhh = Unicode 16位元之十六進位值
    \Uhhhh = Unicode 32位元之十六進位值
    \xhh = 十六進位值
    \ooo = 八進位值
    \0 = null (是null字元,python不像C用null字元來判斷字串結束)

    s = 'a\nb\tc'
    print(s)
    結果:
    a
    b c 
     

    轉換資料型態函數

    轉換資料型態函數:
    int():轉成整數
    float():轉成浮點數
    str():轉成文字

    範例2-1:計算三位同學的平均分數

    輸入函數:a1 = input(訊息)

    範例2-1:計算三位同學的平均分數
    a1 = input('輸入第一位同學成績=?')
    a2 = input('輸入第二位同學成績=?')
    a3 = input('輸入第三位同學成績=?')
    avg = (int(a1)+int(a2)+int(a3))/3
    print('平均分數=%5.2f'% (avg))
     

    python的文字連接串接字元+

    python的文字連接串接字元:+
    vb.net的文字連接串接字元:&
    c#,javascript的文字連接串接字元:+
    php的文字連接串接字元:.
     

    1.整數

    1.整數:
    A.特色:資料範圍沒有限制,可以任意大的數字
    B.次方:5**4 = 5*5*5*5
    C.轉換成整數的函數:int(3.14) = 3
    D.二進位表示 = int('100',2) = 4
    有一個二進位數 = 100,若把它轉成整數 = 4
     

    2.浮點數

    2.浮點數
    A.特色:有小數點的數
    B.轉換成浮點數的函數:float('3.14') = 3.14
     

    3.字串

    3.字串 = 'abc'
    A.轉換成字串的函數:str(3.14) = '3.14'
     
    4.布林值4.布林值
    A.特色:兩種數值:True,False
    B.例如:等於False的各種寫法
    False = 0 = 0.0 = None
    = () 空tuple
    = [] 空串列/數組
    = {} 空字典
    = '' 空字串
    C.轉換成bool布林的函數:bool(1) = True
    bool(0) = False
    bool(()) = False
     

    4.變數的資料型態:type(變數)

    顯示變數的資料型態:type(變數)
    type(20) = <class int>
    type('abc') = <class str>
    type(3.14) = <class float>
    type(True) = <class bool>

    a = 20
    print(a, type(a))
    b = 'abc'
    print(b, type(b))
    c = 3.14
    print(c, type(c))
    d = True
    print(d, type(d))
     

    5.印出變數的資料型態:type(變數)

    type(20) = <class int>
    type('abc') = <class str>
    type(3.14) = <class float>
    type(True) = <class bool>
     

    範例2-2:

    a = 20
    print(a, type(a))
    b = 'abc'
    print(b, type(b))
    c = 3.14
    print(c, type(c))
    d = True
    print(d, type(d))


     
     

    6.變數:

    6.變數:
    A.觀念1:傳統的c,c++,java屬於『靜態語言』,變數使用前必須要先宣告。而且一旦宣告後,就不能更改資料型態了。
    B.觀念2:python屬於『動態語言』,變數使用前不須要先宣告。而且一旦宣告後,還能夠隨時更改變數的資料型態(=右邊直接更改)。

    範例3-2:

    a = 20
    print(a, id(a))
    a = 'abc'
    print(a, id(a))

    補充:id(變數)可以顯示該筆數的記憶體編號

    C.變數的命名:
    ☎變數的開頭,不可以說數字
    ☎變數的開頭,可以是『英文字母,unicode字元,底線_』
    ☎變數可以說『中文』
    ☎大小寫字母的變數,視為不同(A,a)
    ☎特定英文(函數名稱)不可以當作變數,例如:if,else,for...
    ☎正確範例:socore_1,成績
    ☎錯誤範例:1_socore,成績?
     

    7.算術運算子

    7.算術運算子
    加,a=5+3
    減,a=5-3
    乘,a=5*3
    浮點除法,a=5/3
    整數除法,a=5//3(相除的整數商 //)
    相除後求餘數,a=5%3
    次方,a=5**3

    先乘除,後加減,例如:a=(5+3*2)
     

    8.變數遞增,遞減(再加上,再減去)

    8.變數遞增,遞減(再加上,再減去)
    再加,a=a+3,a+=3
    再減,a=a-3,a-=3
    再乘,a=a*3,a*=3
    再浮點除法,a=a/3,a/=3
    再整數除法,a=a//3,a//=3
    再相除後求餘數,a=a%3,a%=3
    再次方,a=a**3,a**=3
     

    9.比較運算子

    9.比較運算子
    >,>=,<,<=
    判斷是否等於:if(a==b)
    判斷是否不等於:if(a!=b)

    10.邏輯運算子

    10.邏輯運算子
    以及:if(x>3 and x<6)
    或:if(x>3 or x<6)
    非:if(not(x>3))

    11.in與is運算子

    11.in與is運算子
    (1).x in y:判斷x是否為y的其中一個元素
    (2).x is y:判斷x是否與y變數的id編號是否相同(是否為同一個物件)

    範例2-3:

    x = 1
    y = [1,2,3]
    print(x in y)

    x = 4
    y = [1,2,3]
    print(x not in y)

    x = 4
    y = '4'
    print(x is y)

    x = 4
    y = '4'
    print(x is not y)

    注意鑑別:
    x not in y
    x is not y

    chp4.迴圈結構for,while

     

        
    上課練習範例4-14-24-34-4
     4-54-6  

    迴圈for loop有四種

    for loop有四種:
    (1)第一種:index迴圈
    for i in range(1,10)

    (2)第二種:讀取container容器的迴圈
    for i in a
    注意:a可以是四種container容器,或是文字string字串

    (3)第三種:讀取container容器的迴圈,並給予編號
    for k,v in enumerate(a)

    (4)第四種:讀取dict容器迴圈的k,v
    for k,v in a.items()
    for k in a.keys()
    for v in a.values()

     

     

    1.for迴圈

    1.for迴圈
    (1).公式:
    for 變數 in range(起始值,終止值,遞增減值):
    要重複做的程式
    #☎注意1:range的範圍為終止值的前一個值
    #☎例如:range(1,10),表示:1,2,3,4,5,6,7,8,9

    範例4-1:印出10行恭喜發財

    範例4-1:印出10行恭喜發財
    for i in range(1,11,1):
    print(i,'恭喜發財')
    成果圖片:
    程式碼內容

     

    範例4-2:印出99乘法表

    範例4-2:印出99乘法表
    for i in range(1,10,1):
    for j in range(1,10,1):
    print(i,'x',j,'=',i*j)
    成果圖片:
    程式碼內容

     

    (2).簡化寫法:只寫終止值(若是起始值=1,遞增1)

    (2).簡化寫法:只寫終止值(若是起始值=1,遞增1)
    for i in range(10):
    for j in range(10):
    print(i,'x',j,'=',i*j)

    (3).三種控制迴圈的指令

    (3).三種控制迴圈的指令
    A.中斷迴圈(break),
    B.直接到下一輪迴圈(continue),
    C.若正常完成全部迴圈會執行else

    範例4-3:99乘法表i*j,印到i=5就停止

    範例4-3:99乘法表i*j,印到i=5就停止
    for i in range(1,10):
    if i==5:
    break
    for j in range(1,10):
    print(i,'x',j,'=',i*j)
    成果圖片:
    程式碼內容

    範例4-4:99乘法表i*j,到i=5就跳過

    範例4-4:99乘法表i*j,到i=5就跳過,直接顯示下一輪
    for i in range(1,10):
    if i==5:
    continue
    for j in range(1,10):
    print(i,'x',j,'=',i*j)
    成果圖片:
    成果圖片:
    程式碼內容

    (5).範例4-6:使用for讀取串列/數組list的所有元素

    (5).範例4-6:使用for讀取串列list的所有元素
    #☎注意:for s in a(s不是編號,而是元素)
    a = ['tom','mike','peter']
    #方法1:沒有編號,直接印出元素
    for s in a:
    print(s)
    #方法2:印出(編號,元素),編號由0開始
    for i in range(0,len(a)):
    print(i,a[i])
    #方法3:印出(編號,元素),編號由1開始
    for i,item in enumeratea,start=1):
    print(i,item)
    成果圖片:
    程式碼內容

    (7).範例4-8:用for產生串列/數組list

    (7).範例4-8:用for產生串列list
    A.特色:生成式(comprehension)可以依照規則產生資料,然後把資料儲存在『串列,字典,集合』內

    B.方法1:傳統for迴圈內用append新增值
    #☎注意:串列的新增元素,必須用a.append(元素)
    #☎注意:不可以用a[編號] = 值來新增
    #新增元素到串列list方法一:[.....](a.append('tom'))
    a=[]
    for i in range(0,6):
    a.append(i**2)
    print(a)

    C.方法2:在[]內用for迴圈來新增值
    公式:[運算式 for 元素 in 可迭代物件]
    #新增元素到串列list方法二:[i*2 for in in range(11)]
    a = [i**2 for i in range(1,6)]
    print(a)


    D.方法3:在[]內用for迴圈來新增值,再加上if判斷
    公式:[運算式 for 元素 in 可迭代物件 if 判斷式]
    #把1~100的偶數新增到list串列裡面
    a = [i for i in range(1,11) if i%2==0]
    print(a)
    成果圖片:
    程式碼內容

    範例4-9:製作99乘法表串列

    範例4-9:製作99乘法表串列,但是每個元素都是一個tuple,
    例如(2,3)
    ☎注意:tuple可以是『字典(dict),或集合(set),或串列(List)』的元素。但是list串列無法成為別人的元素。
    a = [(i,j) for i in range(1,10) for j in range(1,10)]
    print(a)
    成果圖片:
    程式碼內容

    (10).while迴圈

    (10).while迴圈
    A.公式:
    i=起始值
    while i<終止值:
    運算程式
    i=i+1(或是i=i-1)

    #☎注意:在python的i=i+1不能夠寫成i++

    範例4-14:計算1到10的總和

    範例4-14:計算1到10的總和
    i=1
    sum = 0
    while i<11:
    sum += i
    i = i+1
    print(sum)
    #☎注意:在python的i=i+1不能夠寫成i++
    成果圖片:
    程式碼內容

    範例4-15:輸入n,計算1到n的平方合

    範例4-15:輸入n,計算1到n的平方合(1**2+2**2+3**2+...n**2)
    n = int(input('輸入n = '))
    sum = 0
    for i in range(1,n+1):
    sum += i**2
    print(sum)
    成果圖片:
    程式碼內容

    範例4-16:列出1到100,不被2也不被3整除數字

    範例4-16:列出1到100,不被2也不被3整除的數字
    for i in range(1,101):
    if((i%2)!=0 and (i%3)!=0):
    print(i)
    成果圖片:
    成果圖片:
    程式碼內容

     

     

    範例4-19:丟骰子,丟出6遊戲結束

    範例4-19:丟骰子,直到丟出6,才顯示遊戲結束
    #☎注意:隨機亂數的函數是random.randint(1,n)
    #☎注意:而且使用亂數函數,必須用import random
    #☎注意:常用的python亂數函數
    (1)取出1~6的亂數:n1 = random.randint(1,6)
    (2)取出某串列陣列的第n個亂數元素:n1 = random.choice(串列)

    import random
    while True:
    num = random.randint(1,6)
    if num ==6:
    print('丟到6,遊戲結束')
    break
    成果圖片:
    程式碼內容

    範例4-20:猜數字,猜1~99的數

    範例4-20:猜數字,猜1~99的數,若是不對,則會提示猜小了,猜大了,猜中了
    import random
    ans = random.randint(1,99)
    print(ans)
    gus = 0
    while gus != ans:
    gus = int(input('請猜一個數字?'))
    if gus > ans:
    print('猜大了')
    elif gus == ans:
    print('猜中了')
    elif gus < ans:
    print('猜小了')
    成果圖片:
    程式碼內容

     

     
     
    chp5. 資料的儲存容器1:串列/數組(list)
         
    上課練習範例5-15-25-35-4
     5-55-65-75-8
     5-95-10  

    python資料的四種儲存容器Containers

    python資料的四種儲存容器Containers:
    1.python資料的儲存容器有四種:序對tuple元組,串列(list),字典(dict),集合(set)

    一.功用,用途:
    (1).串列(list):list串列,就類似Array陣列,a=[1,2,3]
    (2).集合(set):可以用來做數學的『交集,聯集』計算,a={1,2,3,4}
    (3).字典(dict):可以透過『文字』來存取資料(不需要用編號),a={'b1':'john','b2':'tom','b3':'jane'}
    (4).序對tuple元組:
    _A).tuple類似list串列(差異就是tuple={..},list=[...])。
    _B).tuple可以是『字典(dict),或集合(set),或串列(List)』的元素。但是list串列無法成為別人的元素。


    python資料的儲存容器特色:
    python資料的儲存容器有四種:序對tuple,串列(list),字典(dict),集合(set)
    (1).tuple特色:依序存儲資料,可以依照順序取出資料,但不能夠更改,是不可變的物件。
    (2).串列(list)特色:可依序存儲資料,可以依照順序取出資料,也能夠更改。
    (3).字典(dict)特色:儲存的資料為『鍵vs值』(key vs value)對應的資料。
    (4).集合(set)特色:可儲存沒有次序性的資料。(若要搜尋某資料是否存在,而不根據鍵vs值的方式搜尋,就可以用集合set。

     

     

     

    範例5-0:四種容器:list,set,dict,tuple


    #範例5-0:四種容器
    #(1).串列(list):list串列,就類似Array陣列,a=[1,2,3]
    a = [1,2,3]
    print('list=',a)
    print('list[0]=',a[0])

    #(2).集合(set):可以用來做數學的『交集,聯集』計算,a={1,2,3,4}
    b = {1,2,3,4}
    c = {3,4,5}
    print('b & c=',b & c)
    print('b or c=', b | c)

    #(3).字典(dict):可以透過『文字』來存取資料(不需要用編號),a={'b1':'john','b2':'tom','b3':'jane'}
    a={'b1':'john','b2':'tom','b3':'jane'}
    print(a['b1'])

    #(4).tuple類似list串列,a = ('tom','mike','peter')
    a = (1,2,3)
    print('a[0]=', a[0])
    成果圖片:
    程式碼內容

     

     

     

    範例5-1:list的基本操作(建立,新增,修改,刪除,查詢)

    #第5章.串列/數組/列表(list):基本操作(建立,新增,修改,刪除,查詢)
    #(1).建立list:
    a1 = ["john","tom","mike","jolin"]

    #--------------
    #(2).簡單查詢:取出第1位同學姓名:a[0]
    #重點:串列的編號 = 實際數-1
    print(a1[0])

    #查詢第4位同學姓名:
    print(a1[3])

    #--------------
    #(3).第1種新增:附加到最後:a.append(元素)
    a1.append("marry")
    print(a1)

    #錯誤寫法:
    print()
    b1 = a1.append('jane')
    print(b1)

    #--------------
    #(4).第2種新增:在某個編號位置index新增:a1.insert(編號位置,元素)
    a1.insert(1,"peter")
    print(a1)

    #--------------
    #(5).修改:把mike,改成Bob(a1[0] = '新值')
    a1[3] = "Bob"
    print(a1)

    #--------------
    #(6).第1種刪除:刪除某個編號index:a1.pop(編號)
    a1.pop(0)
    print(a1)

    #--------------
    #(7).第2種刪除:a1.pop()
    #若是沒有指定編號,則刪除最後一個
    a1.pop()
    print(a1)

    #--------------
    #(8).第3種刪除:a1.remove(人名)
    a1.remove("Bob")
    print(a1)

    #-------------- #(9).第4種刪除:刪除第1個元素:del a1[編號]
    del a1[0]
    print(a1)


    成果圖片:
    程式碼內容

     

     

     

    範例5-2:list的四種查詢

    #範例5-2:串列的四種查詢
    b1 = ["john","tom","mike","jolin","marry"]

    #------------------------
    #(1).練習:顯示串tom的編號index:a.index(元素)
    print(b1.index("tom"))

    #練習:然後根據編號,刪除tom
    b1.pop(b1.index("tom"))
    print(b1)

    #------------------------------
    #(2).計算串列(list)長度函數:len(tuple)
    #練習:查看目標群,還有幾人
    print("敵方人數=", len(b1))
    print()

    #---------------------------
    #(3).查詢jjohn是否在串列list內:
    #☎方法:if txt in a

    if "john" in b1:
    print("還存在")
    else:
    print("不存在")

    #-----------------------------------
    #比較,計數迴圈 vs 串列迴圈
    #(1)計數迴圈:for i in range(1,11,1)
    print()
    for i in range(1,11,1):
    print("恭喜發財")

    #(2)串列for迴圈::for 元素 in 串列
    print()
    for item in b1:
    print(item)


    成果圖片:
    程式碼內容

     

     

     

    範例5-3:list的簡單排序

    #範例5-3:串列的排序
    #1.把元素排序
    #觀念:list串列的特點,可以排序
    #正向排序:a.sort()
    #逆向排序:a.sort(reverse=True)


    a1 = ["tom","mike","john","peter","marry"]
    a1.sort()
    print(a1)

    a1.sort(reverse=True)
    print(a1)


    成果圖片:
    程式碼內容

     

     

     

    範例5-4:list的index編號

    #範例5-4:串列/數組/列表,list的index編號
    #https://www.w3schools.com/python/python_lists_access.asp
    #https://www.w3school.com.cn/python/python_lists.asp
    #建立list,6位同學
    a1 = ["tom","john","marry","mike","jolin","peter"]

    #1.search:1st item (index = num -1)
    print(a1[0])
    #1.search:2nd item
    print(a1[1])

    #2.Negative Index
    #2.search:last item
    print(a1[-1])

    #2.search:2nd last item
    print(a1[-2])

    #3.範圍編號: Range of Indexes
    #印:第3位,到,第5位
    #重點:(index = num -1)
    #編號是:第2號,到,第4+1號(最後一個號碼的前一號)
    print(a1[2:5])

    #4.範圍編號:從開始印到某位,from the beginning to....
    #印出:第1位,到,第5位
    #編號:第0號,到,第4+1號(最後一個號碼的前一號)
    print(a1[:5])

    #注意,尾數:不會印出
    #注意,只會印出到,前1號

    #5.範圍編號:從某位印到最後
    #印出:第3位,到,最後
    #編號:第2號,到,最後(不寫,就是最後)
    print(a1[2:])

    #6.範圍編號:從最後4位,到,最後1位的前1位
    #注意,尾數:不會印出
    print(a1[-4:-1])

    #7.判別是否某元素(jolin),在串列裡面
    n1 = "jolin"
    if n1 in a1:
    print(n1, "是本班同學")
    else:
    print(n1,"不是本班同學")


    成果圖片:
    程式碼內容

     

     

     

    範例5-3:串列(list):類似傳統的陣列

    7.#範例5-3:串列(list):類似傳統的陣列
    #(1).建立方法:
    a = ['tom','mike','peter']

    #(2).取出其中元素:a[0]
    a = ['tom','mike','peter']
    print('(2)', a[0])

    #(3).計算串列(list)長度函數:len(tuple)
    a=['tom','mike','peter']
    b=len(a)
    print('(3)',b)

    #(4).修改串列(list)的某個元素:a[1] = '新值'
    a=['tom','mike','peter']
    a[1] = 'jane'
    print('(4)',a)

    #(5).顯示串列(list)的某個元素的編號index:a.index(元素)
    a=['tom','mike','peter']
    b = a.index('peter')
    print('(5)',b)

    #(6).新增一個元素到串列(list)的最後:a.append(元素)
    a=['tom','mike','peter']
    a.append('marry')
    print('(6)',a)

    #錯誤寫法:
    b = a.append('marry')
    print(b)

    #(7).新增一個元素到串列(list)的某個位置:a.insert(位置,元素)
    a=['tom','mike','peter']
    a.insert(1,'marry')
    print('(7)',a)

    #(8).刪除第幾個元素:del a[編號]
    a=['tom','mike','peter']
    del a[1]
    print('(8)',a)

    #(9).刪除第幾個元素:a.pop(編號)
    a=['tom','mike','peter']
    a.pop(1)
    print('(9)',a)
    a.pop() #若是沒有指定編號,則刪除最後一個
    print(a)

    #(10).讀取串列裡面的每個元素:for 元素 in 串列
    a=['tom','mike','peter']
    for 元素 in a:
    print(元素)

    #(11).排序:a.sort()
    a=['tom','mike','peter']
    a.sort()
    print('(11)',a)

    #(11).把串列元素排序sorted(a),反向排reversed(a)
    a=['tom','mike','peter','yellow']
    print('(11)','原始值=',a)
    b = [i for i in reversed(a)]
    print('反向=',b)
    c = [i for i in sorted(a)]
    print('排序=',c)
    d = [i for i in reversed(sorted(a))]
    print('反向排序=',d)

    #(12).串列可以包含各種型態的資料
    a=['a001','mike',90,85,65.5]
    print('(12)',a)

    #(13).連接兩個串列:+
    a=['tom','mike','peter']
    b=['張三','李四','王五']
    print('(13)',a+b)

    #(14).把字串或tuple轉換成list串列函數:list()
    a='tom'
    print('(14)',list(a))

    #(15).將字串分割成串列(傳統的陣列):字串.split('分隔字')
    a='張三,李四,王五,趙六'
    list_a = a.split(',')
    print('(15)',list_a)

    #(16).取出串列list的部分元素:a[開始:結束:間隔]
    a=list('abcdefg')
    print('(16)',a)
    print(a[:]) #印出串列的每一個元素
    print(a[1:]) #印出編號1位置後的每一個元素
    print(a[:3]) #印出元素,直到編號3的前一個位置
    print(a[2:5]) #印出編號2元素,直到編號5的前一個位置
    print(a[0:7:2]) #印出編號0元素,直到編號7的前一個位置,間隔2
    print(a[::-1]) #反轉字串,顛倒字串

    #(17).拷貝複製串列,有三種方法:copy,[:],=
    #A.特色:listb=lista,這兩個串列指向同一個記憶體物件,若修改其中一個元素,另外一個也會跟著修改
    #B.特色:listb=lista.copy()
    #或是 listb=lista[:]
    #這兩個串列是不同的記憶體物件,若修改其中一個元素,另外一個不會受到影響
    a=['tom','mike','peter']
    b = a.copy()
    b[0] = 'bbb'
    print('(17)',a)
    print(b)
    #################
    c = a[:]
    c[0] = 'ccc'
    print(a)
    print(c)
    #################
    d = a
    d[0] = 'ddd'
    print(a)
    print(d)
    成果圖片:
    成果圖片:
    程式碼內容

     

     

     

    範例5-5:查詢元素是否在串列list內

    #範例5-5:查詢元素是否在串列list內:
    #☎方法1:一般一維串列:if txt in a
    a=['tom','mike','peter','yellow']
    def find_tuple(txt,a):
    if txt in a:
    return txt + '存在list內'
    else:
    return txt + '不存在list內'

    s = input('請輸入查詢姓名?')
    res = find_tuple(s,a)
    print(res)

    #☎方法2:一般一維串列:a.index(txt)
    #[1,2,3].index(2) # => 1
    #[1,2,3].index(4) # => ValueError

    a=['tom','mike','peter','yellow']
    s = input('請輸入查詢姓名?')
    try:
    res = a.index(s)
    print(s+'找到了,在編號為'+str(res)+'的位置')
    except ValueError:
    print(s+'找不到')

    #☎方法3:一般一維串列:[x+'找到了' for i,x in enumerate(a) if s==x]
    a=['tom','mike','peter','yellow']
    s = input('請輸入查詢姓名?')
    #查詢方法1:
    print([x+'找到了' for i,x in enumerate(a) if s==x])

    #☎方法4:一般一維串列:for i,x in enumerate(a) if s==x
    a=['tom','mike','peter','yellow']
    s = input('請輸入查詢姓名?')

    #查詢元素方法:
    b = ['姓名為'+x for i,x in enumerate(a) if s==x]
    if b==[]:
    print('找不到')
    else:
    print(b)
    成果圖片:
    程式碼內容

     

     

     

     
     
    chp6. 資料的儲存容器2:集合(set)
        
    上課練習範例6-16-26-3

    python資料的四種儲存容器Containers

    python資料的四種儲存容器Containers:
    1.python資料的儲存容器有四種:序對tuple元組,串列(list),字典(dict),集合(set)

    一.功用,用途:
    (1).串列(list):list串列,就類似Array陣列,a=[1,2,3]
    (2).集合(set):可以用來做數學的『交集,聯集』計算,a={1,2,3,4}
    (3).字典(dict):可以透過『文字』來存取資料(不需要用編號),a={'b1':'john','b2':'tom','b3':'jane'}
    (4).序對tuple元組:
    _A).tuple類似list串列(差異就是tuple={..},list=[...])。
    _B).tuple可以是『字典(dict),或集合(set),或串列(List)』的元素。但是list串列無法成為別人的元素。


    python資料的儲存容器特色:
    python資料的儲存容器有四種:序對tuple,串列(list),字典(dict),集合(set)
    (1).tuple特色:依序存儲資料,可以依照順序取出資料,但不能夠更改,是不可變的物件。
    (2).串列(list)特色:可依序存儲資料,可以依照順序取出資料,也能夠更改。
    (3).字典(dict)特色:儲存的資料為『鍵vs值』(key vs value)對應的資料。
    (4).集合(set)特色:可儲存沒有次序性的資料。(若要搜尋某資料是否存在,而不根據鍵vs值的方式搜尋,就可以用集合set。

     

     

     

    6.四種容器:範例6-0


    #範例6-1:四種容器
    #(1).串列(list):list串列,就類似Array陣列,a=[1,2,3]
    a = [1,2,3]
    print('list=',a)
    print('list[0]=',a[0])


    #(2).集合(set):可以用來做數學的『交集,聯集』計算,a={1,2,3,4}
    b = {1,2,3,4}
    c = {3,4,5}
    print('b & c=',b & c)
    print('b or c=', b | c)


    #(3).字典(dict):可以透過『文字』來存取資料(不需要用編號),a={'b1':'john','b2':'tom','b3':'jane'}
    a={'b1':'john','b2':'tom','b3':'jane'}
    print(a['b1'])


    #(4).tuple類似list串列,a = ('tom','mike','peter')
    a = (1,2,3)
    print('a[0]=', a[0])
    成果圖片:
    程式碼內容

     

     

     

    9.範例6-2:集合(set):以{..}儲存的變數

    9.範例6-2:集合(set):以{..}儲存的變數
    #(1).建立方法:兩種方法
    #方法一:a = {1,2,3,4}
    #方法二:b = set((1,2,'a','b'))


    a = {1,2,3,4}
    print('(1)',a)
    b = set((1,2,'a','b'))
    print(b)
    c = set('today')
    print(c)


    #(2).空集合
    #☎注意:空集合必須用a=set()
    #不可以用a={}
    #例如:
    a=set()


    #(3).新增一筆資料:a.add(元素)
    a = set((1,2,'a','b'))
    a.add('tom')
    print('(3)',a)


    #(4).刪除一筆資料:a.remove(元素)
    a = set((1,2,'a','b'))
    a.remove('b')
    print('(4)',a)


    #(5).把串列元素排序sorted(a),反向排reversed(a)
    #☎注意:都無效:sorted(a),reversed(a)
    a={'tom','mike','peter','yellow'}
    print('(5).原始值=',a)
    #b = {i for i in reversed(a)}
    #print('反向=',b)
    c = {i for i in sorted(a)}
    print('排序=',c)
    d = {i for i in reversed(sorted(a))}
    print('反向排序=',d)


    #(6).集合的運算:交集(&),聯集(|),差集(-),互斥(^)
    a = set('tiger')
    b = set('bear')
    print('(6)',a|b) #聯集(|)
    print(a&b) #交集(&)
    print(a-b) #差集(-):元素存在a,但是不存在b
    print(a^b) #互斥(^):元素存在a但是不存在b,或元素存在b但是不存在a
    print(a)





    #(7).二維集合
    #A.錯誤的二維集合寫法
    #stu = {{'tom',190},{'mike',170},{'jane',200},{'peter',185}}


    #B.二維集合寫法
    stu = {('tom',190),('mike',170),('jane',200),('peter',185)}
    #或是
    stu = [('tom',190),('mike',170),('jane',200),('peter',185)]


    #C.如何把二維串列,轉換成二維集合
    #方法
    #(i).先把內部的串列list用map()轉成tuple
    #(ii).然後用set()再轉換成集合
    #(ii).外面用list()轉換
    #範例:
    t=[[1, 7], [3, 7], [1, 7], [5, 8], [3, 7]]
    t = list(set(map(tuple,t)))
    print('(7)',t)
    #結果:[(3, 7), (5, 8), (1, 7)]
    #集合set裡面重複的,會自動刪除
    #>>> t=[[1, 7], [3, 7], [1, 7], [5, 8], [3, 7]]
    #>>> t = list(set(map(tuple,t)))
    #>>> t
    #[(3, 7), (5, 8), (1, 7)]
    成果圖片:
    程式碼內容

    範例6-3:顯示一個對聯的文字集合(刪除標點符號)

    #範例6-3:顯示一個對聯的文字集合(刪除標點符號)
    a=" 天增歲月人增壽,春滿乾坤福滿門。 "
    a.strip()
    b = set(a)
    b.remove(',')
    b.remove('。')
    b.remove(' ')
    print(b)
    成果圖片:
    程式碼內容

    範例6-4:顯比較兩段詩詞的共同字有哪些

    (8).範例6-4:顯比較兩段詩詞的共同字有哪些?
    #☎注意:若是要做集合的交集聯集差集,就必須把串列list或tuple轉成set
    a="君問歸期未有期,巴山夜雨漲秋池。何當共翦西窗燭,卻話巴山夜雨時。"
    b="雲想衣裳花想容,春風拂檻露華濃。若非群玉山頭見,會向瑤台月下逢。"
    a = set(a)
    a.remove(',')
    a.remove('。')

    b = set(b)
    b.remove(',')
    b.remove('。')

    print(a&b) #使用交集,顯示交集的集合set
    成果圖片:
    程式碼內容

     

     

     

    範例6-5:已知全班同學中數學及格名單,英文及格名單

    (9).範例6-5:已知全班同學中數學及格名單,英文及格名單。
    全班同學:張三,李四,王五,趙六,林七,陳八,孫九
    數學及格:張三,李四,林七,陳八
    英文及格:張三,李四,王五,陳八,孫九

    請計算A.數學不及格名單,B.英文不及格名單,
    C.英文與數學同時及格名單。
    D.英文及格,但是數學不及格名單。

    #☎注意:若是要做集合的交集聯集差集,就必須把串列list或tuple轉成set
    #☎注意:set裡面的元素,一般都是用tuple(),或是list[]
    全班同學 = set(('張三','李四','王五','趙六','林七','陳八','孫九'))
    數學及格 = set(('張三','李四','林七','陳八'))
    英文及格 = set(('張三','李四','王五','陳八','孫九'))
    print('數學不及格=',全班同學-數學及格)
    print('英文不及格=',全班同學-英文及格)
    print('數學英文都及格=',數學及格 & 英文及格)
    print('英文及格,但是數學不及格=',英文及格 - 數學及格)
    成果圖片:
    程式碼內容

     

     

     

     
     
    chp7. 資料的儲存容器3:字典(dict)
         
    上課練習範例7-17-27-37-4
    上課練習範例7-57-67-7 

    python資料的四種儲存容器Containers

    python資料的四種儲存容器Containers:
    1.python資料的儲存容器有四種:序對tuple元組,串列(list),字典(dict),集合(set)

    一.功用,用途:
    (1).串列(list):list串列,就類似Array陣列,a=[1,2,3]
    (2).集合(set):可以用來做數學的『交集,聯集』計算,a={1,2,3,4}
    (3).字典(dict):可以透過『文字』來存取資料(不需要用編號),a={'b1':'john','b2':'tom','b3':'jane'}
    (4).序對tuple元組:
    _A).tuple類似list串列(差異就是tuple={..},list=[...])。
    _B).tuple可以是『字典(dict),或集合(set),或串列(List)』的元素。但是list串列無法成為別人的元素。


    python資料的儲存容器特色:
    python資料的儲存容器有四種:序對tuple,串列(list),字典(dict),集合(set)
    (1).tuple特色:依序存儲資料,可以依照順序取出資料,但不能夠更改,是不可變的物件。
    (2).串列(list)特色:可依序存儲資料,可以依照順序取出資料,也能夠更改。
    (3).字典(dict)特色:儲存的資料為『鍵vs值』(key vs value)對應的資料。
    (4).集合(set)特色:可儲存沒有次序性的資料。(若要搜尋某資料是否存在,而不根據鍵vs值的方式搜尋,就可以用集合set。

     

     

     

    6.四種容器:範例7-0


    #範例7-0:四種容器
    #(1).串列(list):list串列,就類似Array陣列,a=[1,2,3]
    a = [1,2,3]
    print('list=',a)
    print('list[0]=',a[0])

    #(2).集合(set):可以用來做數學的『交集,聯集』計算,a={1,2,3,4}
    b = {1,2,3,4}
    c = {3,4,5}
    print('b & c=',b & c)
    print('b or c=', b | c)

    #(3).字典(dict):可以透過『文字』來存取資料(不需要用編號),a={'b1':'john','b2':'tom','b3':'jane'}
    a={'b1':'john','b2':'tom','b3':'jane'}
    print(a['b1'])

    #(4).tuple類似list串列,a = ('tom','mike','peter')
    a = (1,2,3)
    print('a[0]=', a[0])
    成果圖片:
    程式碼內容

     

     

     

    8.範例7-6:字典(dict):類似傳統的結構struct物件,類別物件

    #範例7-6:字典(dict):類似傳統的結構struct物件,類別物件
    #(1).建立方法:
    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    print('(1)',a['tom'])
    print(a['mike'])

    #(2).取出字典dict的某個元素,若不存在,用get()顯示錯誤訊息:
    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    print('(2)',a.get('jane'))
    print(a.get('jane','找不到這個人'))

    #(3).新增/修改字典dict的一個元素:a['鍵'] = '值'
    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    a['jane'] = '珍妮'
    print('(3)',a)
    a['peter'] = '彼得'
    print(a)
    print(a.get('jane','找不到這個人'))

    #(4).刪除字典dict的一個元素:del a['鍵']
    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    del a['tom']
    print('(4)',a)

    #(5).刪除字典dict的所有元素:a.clear()
    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    a.clear()
    print('(5)',a)

    #(6).把串列轉換成字典dict格式:a.clear()
    a = [['tom','湯姆'],['mike','麥克'],['peter','彼德']]
    b = dict(a)
    print('(6)',b)

    a = (['tom','湯姆'],['mike','麥克'],['peter','彼德'])
    b = dict(a)
    print(b)

    #(7).合併兩個字典dict格式:a.update(b)
    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    b = {'marry':'瑪麗','brown':'布朗'}
    a.update(b)
    print('(7)',a)

    #(8).拷貝複製字典dict,有兩種方法:copy,=
    #A.特色:dict_2=dict_1,這兩個字典指向同一個記憶體物件,若修改其中一個元素,另外一個也會跟著修改
    #B.特色:dict_2=dict_1.copy()
    #這兩個字典是不同的記憶體物件,若修改其中一個元素,另外一個不會受到影響

    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    b = a.copy()
    b['tom'] = '唐木'
    print('(8)',a)
    print(b)
    #################
    d = a
    d['mike'] = '脈課'
    print(a)
    print(d)

    #(9).讀取字典dict的鍵,值:for 鍵,值 in 字典
    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    #(A).讀取字典的所有值
    for value in a.values():
    print('(9)',value)

    #(B).讀取字典的所有鍵
    for key in a.keys():
    print(key)

    #(C).讀取字典的所有鍵+值
    for key,value in a.items():
    print(key,',',value)

    #(10).把字典元素排序sorted(a),反向排reversed(a)
    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    print('(10)','原始值=',a)
    b = {k:v for k,v in sorted(a.items())}
    print('排序=',b)

    #(11).如何使用enumerate列舉方法來顯示字典dict
    #方法:for i, (k, v) in enumerate(mydict.items())
    #☎注意:enumerate(mydict.items())裡面的字典,必須要寫items(),不可以只有寫dict

    #範例:
    a = {'tom':'湯姆','mike':'麥克','peter':'彼德'}
    #顯示第一維tuple元素
    print('(11)',[x+'的姓名為'+y for i,(x,y) in enumerate(a.items())])
    成果圖片:
    成果圖片:
    程式碼內容

     

     

     

    範例7-8:製作英翻中字典(貓狗魚豬),若是沒有該字顯示找不到

    #範例7-8:製作英翻中字典(貓狗魚豬),若是沒有該字顯示找不到
    #☎注意:若是要對應關係,就要用字典dict
    a = {'cat':'貓','dog':'狗','fish':'魚','pig':'豬'}
    print(a)
    print(a.keys())
    b = input('請輸入查詢的英文?')
    print(a.get(b,'找不到這個字'))
    成果圖片:
    程式碼內容

     

     

     

    範例7-12:輸入三位班上同學姓名,email,然後提供查詢

    (10).範例7-12:輸入三位班上同學姓名,email,然後提供查詢
    #☎注意:若是要對應關係,就要用字典dict
    #☎注意:若是要搜尋資料表,就可以用字典dict
    #☎注意:字典dict的新增元素方法: stu[a1] = b1
    #☎注意:字典dict的查詢元素方法: stu.get(a1,'找不到')
    stu = dict() # 空的字典
    # 輸入三個新的同學資料
    a1 = input('輸入同學姓名?')
    b1 = input('輸入同學email?')
    stu[a1] = b1
    a1 = input('輸入同學姓名?')
    b1 = input('輸入同學email?')
    stu[a1] = b1
    a1 = input('輸入同學姓名?')
    b1 = input('輸入同學ema+il?')
    stu[a1] = b1
    print(stu)
    # 查詢
    a1 = input('輸入你要查詢的同學姓名?')
    result = stu.get(a1,'找不到這個學生')
    print(result)
    成果圖片:
    程式碼內容

     
     
     
    chp8. 資料的儲存容器4:元組(tuple)
        
    上課練習範例8-1  

    python資料的四種儲存容器Containers

    python資料的四種儲存容器Containers:
    1.python資料的儲存容器有四種:序對tuple元組,串列(list),字典(dict),集合(set)

    一.功用,用途:
    (1).串列(list):list串列,就類似Array陣列,a=[1,2,3]
    (2).集合(set):可以用來做數學的『交集,聯集』計算,a={1,2,3,4}
    (3).字典(dict):可以透過『文字』來存取資料(不需要用編號),a={'b1':'john','b2':'tom','b3':'jane'}
    (4).序對tuple元組:
    _A).tuple類似list串列(差異就是tuple={..},list=[...])。
    _B).tuple可以是『字典(dict),或集合(set),或串列(List)』的元素。但是list串列無法成為別人的元素。


    python資料的儲存容器特色:
    python資料的儲存容器有四種:序對tuple,串列(list),字典(dict),集合(set)
    (1).tuple特色:依序存儲資料,可以依照順序取出資料,但不能夠更改,是不可變的物件。
    (2).串列(list)特色:可依序存儲資料,可以依照順序取出資料,也能夠更改。
    (3).字典(dict)特色:儲存的資料為『鍵vs值』(key vs value)對應的資料。
    (4).集合(set)特色:可儲存沒有次序性的資料。(若要搜尋某資料是否存在,而不根據鍵vs值的方式搜尋,就可以用集合set。

    6.四種容器:範例8-0


    #範例8-0:四種容器
    #(1).串列(list):list串列,就類似Array陣列,a=[1,2,3]
    a = [1,2,3]
    print('list=',a)
    print('list[0]=',a[0])

    #(2).集合(set):可以用來做數學的『交集,聯集』計算,a={1,2,3,4}
    b = {1,2,3,4}
    c = {3,4,5}
    print('b & c=',b & c)
    print('b or c=', b | c)

    #(3).字典(dict):可以透過『文字』來存取資料(不需要用編號),a={'b1':'john','b2':'tom','b3':'jane'}
    a={'b1':'john','b2':'tom','b3':'jane'}
    print(a['b1'])

    #(4).tuple類似list串列,a = ('tom','mike','peter')
    a = (1,2,3)
    print('a[0]=', a[0])
    成果圖片:
    程式碼內容

     

     

     

    6.tuple:範例8-1

    #範例8-1:tuple:
    #(1).建立方法1:
    a = 'tom','mike','peter'
    #建立方法2:
    a = ('tom','mike','peter')

    #(2).取出其中元素:a[0]
    a = ('tom','mike','peter')
    print(a[0])

    #(3).將tuple指定給多個變數:a,b,c = tuple
    a,b,c = ('tom','mike','peter')
    print(a)

    #(4).將兩個tuple變數交換:a,b = b,a
    a=('tom','mike')
    b=(1,2,3)
    print('交換前,a=',a,'b=',b)
    a,b = b,a
    print('交換後,a=',a,'b=',b)
    print(a)

    #(5).轉換tuple函數:tuple(串列)
    a=('tom','mike','peter')
    b=tuple(a)
    print(b)

    #(6).計算tuple長度函數:len(tuple)
    a=('tom','mike','peter')
    b=len(a)
    print(b)

    #(7).只有一個tuple元素,必須加上,:('tom',)
    a=('tom',)
    print(a)

    #(8).把tuple元素排序sorted(a),反向排reversed(a)
    a=('tom','mike','peter','yellow')
    print('原始值=',a)
    b = [i for i in reversed(a)]
    print('反向=',b)
    c = [i for i in sorted(a)]
    print('排序=',c)
    d = [i for i in reversed(sorted(a))]
    print('反向排序=',d)

    #或是,反向排序
    print(sorted(a, reverse=True))
    成果圖片:
    程式碼內容

    全部共 0則留言
    登入帳號密碼代表遵守學術網路規範


    文章分類 Labels


    最新文章 Top10

    中華科技大學數位化學習歷程 - 意見反應