<style> .w { color: #FFFFFF; font-size: 1px; left=100px; } h2{ color:#000080; } </style> <font color="#000080">Python 第四週講義</font> === >[name= 林德恩、陳睿倬][time= Nov 12,2021 ] ###### tags:`python` `tcirc39th` `社課` `臺中一中電研社` [TOC] --- ## <span class="blue">電研社</span> 社網:[tcirc.tw](https://tcirc.tw) online judge:[judge.tcirc.tw](https://judge.tcirc.tw) IG:[TCIRC_39th](https://www.instagram.com/tcirc_39th) --- <!-- append(), pop(), len(), insert(), index(), sort() pop(), clear() add() 比較運算子(== != > >= < <=), 邏輯運算子(and or not), 位元邏輯運算子(& | ~ ^ ) --> ## 函式(function) 函式是一種將功能先寫好,在後面可使其包裝起來,重複利用。 ex. ```python= print() .append() .sort() ``` ---- ### 自訂函式 我們可以自己寫一個函式,並自訂它的功能。 ---- #### 創建 ```python= def 函式名稱(參數1,參數2,參數3...): #參數數量可以0~∞ return 回傳值 #此行可寫可不寫,沒寫就只是不會回傳資料 ``` ---- #### 使用 在創建完就可以使用函式,並可以重複使用 ex. ```python= def a(x,y): print(x+y) a(1,2) ``` ---- #### 回傳值 在將函式放入其他函式或將它作為一個值時,必須有回傳值(return),在回傳之後,函式就會結束 ```python= def a(x,y): print(x+y) return x-y print(a(1,2)) b=a(3,5) print(b) ``` ---- **output** ``` 3 -1 8 -2 ``` ---- #### 遞迴 將函式多次在回傳值呼叫自己就是遞迴,多搭配if,else,elif使用 注意:在實作遞迴時要記得設置終止條件,否則會出現錯誤 ```python= def a(x,y): print(x,y,"/") if(x>y): return a(x-y,y+1) else: return 1 print(a(5,2)) ``` ---- 範例: [費波那契數列](https://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0) f(n) = f(n-1) + f(n-2) f(0) = 0, f(1) = 1 錯誤的寫法: ```python= def fib(x): return fib(x-1) + fib(x-2) print(fib(9)) ``` output ``` RecursionError: maximum recursion depth exceeded ``` 因為沒有設定結束 ---- 正確寫法 ```python= def fib(x:int): if (x <= 1):return x # <-- stop condition return fib(x-1) + fib(x-2) # 0 1 2 3 4 5 6 7 8 9 print(fib(9)) # 0 1 1 2 3 5 8 13 21 34 ``` **output** ``` 34 ``` --- ## 物件(object) <!--有點難解釋--> 像數值、字串、list、函式都是物件 基本上所有東西都是物件 --- ## class(類別) <!--不知如何說清楚--> 可以import ex. int、random、string 注意,在寫class時,一定要寫初始化程式,定義屬性 \__init__ ---- ```python= class TCFSH: def __init__(self, id, name, grade): self.id = id self.name = name self.grade = grade self.score = None john = TCFSH(910943, "John", 2) print(john.id) print(john.name) print(john.grade) print(john.score) john.score = 80 print(john.score) ``` ---- **output** ``` 910943 John 2 None 80 ``` ---- ### 類別裡的函式 我們可在類別class裡定義函式,方便我們對物件更改,訪問屬性 ```python= class TCFSH: def __init__(self, id, name, grade): self.id = id self.name = name self.grade = grade self.score = None def show_inf(self): name = self.name # 在類別裡呼叫物件屬性用self print("show", name, "inf") print(self.id) print(self.name) print(self.grade) print(self.score) def change_std_score(self, score): self.score = score print(str(self.name)+"'s grade is", self.score ) john = TCFSH(910943, "John", 2) john.show_inf() # <-- 呼叫物件函式時,需要先打上 物件名稱.函式名稱 print("=========================") john.change_std_score(100) ``` ---- **output** ``` show John inf 910943 John 2 None ========================= John's grade is 100 ``` ---- ### 父類別、子類別 可以在class底下建立class在外層的是父類別,下一層的是子類別 以此類推,而呼叫子類別時要先呼叫父類別才能運作,中間如何呼叫內部的函式一樣用<span style="font-size:30px">.</span>隔開 ---- ```python= class a: class b: def __init__(self): self.z=1 def k(y): print(y) def __init__(self): self.w=1 def n(x): print(x**2) a.b.k(15) a.n(10) ``` ---- **output** ``` 15 100 ``` --- ## 樹(tree) 樹是一種電腦的資料結構,如同容器一樣可儲存資料,並有效地插入,搜尋資料 ![](https://i.imgur.com/gfch3G6.png =600x) [image link](https://www.google.com/url?sa=i&url=https%3A%2F%2Ftowardsdatascience.com%2F8-useful-tree-data-structures-worth-knowing-8532c7231e8c&psig=AOvVaw17gUi1A3LzTZQL70FFlEaX&ust=1636726156512000&source=images&cd=vfe&ved=0CAsQjRxqFwoTCPCQpKK-kPQCFQAAAAAdAAAAABAD) ---- Root:根,最上面的一個點 Node:節點,相連的點 Parent:父節點 Child:子節點 Grandchild:子節點的子節點 Ancestor:在往上跨一代的節點都是該點的Ancestor(不含父節點) Descendant:在往下跨一代的節點都是該點的Descendant(不含子節點) ---- Subtree:子樹,下面有child的child Leaves:沒有child的子節點 Key:裡面的值 Edge:節點之間的連接 Sibling:兄弟節點 Level:由上往下算(ex.Level 1,Level 2,Level 3...) Hight:高度,由下往上算有幾層 Tree Degree:子節點數 ---- #### 二元樹(binary tree) 二元樹是樹的其中一種結構,它只有每一層只有兩個分支 習慣上認為兩個子樹是不同的tree(只有在二元樹) 二元樹(排序) ![](https://i.imgur.com/JYg3C6i.png) 排序後右邊的樹一定比左邊大,右子樹比左子樹大 [image link](https://www.google.com/url?sa=i&url=https%3A%2F%2Fithelp.ithome.com.tw%2Farticles%2F10205875&psig=AOvVaw1vT_qOt_Jj5MerGNK2x9ma&ust=1636726227746000&source=images&cd=vfe&ved=0CAsQjRxqFwoTCPj3_8K-kPQCFQAAAAAdAAAAABAD) ---- 完美二元樹(Perfect Binary Tree):每一層都是最大節點數 完全二元樹(Complete Binary Tree):是完美二元樹或除了最後一層以外是滿的,並只連續缺少右子樹。 ---- <!--記得排版,我不清楚你的程式怕排錯了--> ```python= import random as r class binary_tree: def __init__(self, data): self.left = None self.right = None self.data = data def SetChild(self, n): if ( n.data > self.data): if (self.right == None): self.right = n return 0 else: self.right.SetChild(n) elif (n.data < self.data): if (self.left == None): self.left = n return 0 else: self.left.SetChild(n) def show(self): print("(", end = " ") if (self.left != None): self.left.show() #print(self.left.data) else: print(None, end = ", ") print(self.data, end = ", ") if(self.right != None): self.right.show() #print(self.right.data) else: print(None, end = ", ") print(")", end = " ") # set root a = [] n = r.randint(0, 10) a.append(n) a[0] = binary_tree(n) for i in range(1, 6): n = r.randint(0, 50) a.append(n) a[i] = binary_tree(a[i]) a[0].SetChild(a[i]) for i in a: print(i.data, end = " ") print("") a[0].show() ``` ---- output ``` 3 49 47 1 14 11 ( ( None, 1, None, ) 3, ( ( ( ( None, 11, None, ) 14, None, ) 47, None, ) 49, None, ) ) ``` <span class="w">1232</span>
{"title":"Python第四週講義 臺中一中電研社","slideOptions":{"theme":"sky","transition":"convex"}}
    315 views
   owned this note