# Python ## Get Start!(install) How to start? 要怎麼開始寫python 首先你要先安裝python到你的電腦 step1 到[python官網](https://www.python.org/)<--小力點我 ![](https://i.imgur.com/DATvkRE.png) step2 找一下Download(下載)這個關鍵字在哪 ![](https://i.imgur.com/IsBD80H.png) step3 會看到上面寫Download for Windows,如果你是Windows系統的人圖一那個圈起來的地方給他點下去 使用Mac電腦(蘋果)的人點圖二綠色圈起來那邊,然後點圖三圈起來那邊(其實在Python Releases for macOS裡面的選項都能點,這邊代表的是python各種版本的載點) ![](https://i.imgur.com/dm0euY2.png)圖一🔼 ![](https://i.imgur.com/3C1g8SM.png)圖二🔼 ![](https://i.imgur.com/2mPYIm9.png)圖三🔼 如果你不會按按鈕,這邊提供任意門 [Windows用戶](https://www.python.org/downloads/windows/) [MacOS用戶](https://www.python.org/downloads/macos/) step4 正常來說會開始下載一個檔案 ![](https://i.imgur.com/rjylMa7.png) step5 下載完打開後就一直按下一步就安裝完成了!!! step6(這邊我使用的編輯器是Visual Stdio Code) 一樣先到[官網](https://code.visualstudio.com/)<--小力點我 ![](https://i.imgur.com/YXhRBMF.png) step7 如果你是Windows系統的就點那個藍藍的地方(中間的不是上面的) 如果你是MacOS系統的就點旁邊的勾勾(?,然後選stable那個藍勾勾 ![](https://i.imgur.com/Yg3wzZ6.png)Windows看上面 ################挖系分隔線################ ![](https://i.imgur.com/6toerOn.png) ![](https://i.imgur.com/tbJ3Z37.png)Mac看上面 step8 點完就開始下載,然後一樣一直按下一步就完工了!!! 如果說你出了一堆問題,那就~~別寫了~~ 可以利用線上的環境去執行程式,但是線上的環境只能讓你看到執行完的狀況,存檔的部分可能要另外想辦法,盡量不要用線上的環境拉,除非你很急著要寫python或是測試一些小東西,否則建議安裝好在電腦上。 [線上環境](https://www.programiz.com/python-programming/online-compiler/) ## Get Start!(Usage) 載好VScode和Python後就可以開始寫囉! 先打開VScode ![](https://i.imgur.com/cQjJf5x.png) 先忽略右下角,那邊在更新套件,畫面應該如圖片那樣。 接下來點左邊那排東東最上面那個檔案總管 ![](https://i.imgur.com/BTkDZGI.png) 你可以按開啟資料夾選擇你要放python程式碼的地方(資料夾) Ps.可以先在桌面空白處按右鍵新增資料夾,然後選擇那個資料夾 選擇完後畫面應該是這樣(我的資料夾名叫Python) ![](https://i.imgur.com/squw1IJ.png) ![](https://i.imgur.com/91NPdFi.png) 第一個是新增檔案,點了之後會叫你輸入檔案名稱,名稱後面加上.py他就會自動判斷成python檔案囉(左邊圖案變成蛇蛇) EX. ![](https://i.imgur.com/ILCUbba.png) 按Enter就成功建立檔案囉(haha.py)我也不知道為什麼會有超連結== 可以到你放python程式碼,也就是一開始選的那個資料夾裡面看,會出現你剛剛新增的檔案。 就可以開始寫python程式囉,記得寫完要按ctrl+s這樣才會存檔喔 寫完後去左邊那排東東點方塊那個**搜尋run code**安裝第一個 這邊我已經安裝好了,你們的畫面應該是出現一個install的藍色按鈕,按下去安裝 ![](https://i.imgur.com/4F0GKBf.png) 載好後把那個安裝的分頁先關掉,回到剛剛寫code的地方 ![](https://i.imgur.com/bcpeI6Z.png) 按右上角那個三角形,選"在終端機中執行Python檔案" 下面出現的視窗就是你程式執行的結果了 完結灑花(333 這邊也順便介紹一下使用線上環境的方法: ![](https://i.imgur.com/wG75Byc.png) 點開網址後應該是出現這個畫面(廣告是什麼我就不知道了(X ) 左半部是你寫程式的部分,寫完後你按Run就會執行,並且顯示在右邊,右邊可以進行輸入互動等等... 阿然後我的畫面是黑的是因為我調成深色模式 ![](https://i.imgur.com/O8KSbw9.png) 另外 左邊那排可以選擇其他語言,從上到下是Python/C/C++/Java ![](https://i.imgur.com/LFgLDUC.png) ## 資料型態 電腦存著很多資料,當然需要一個分類方式,這就是為什麼有這些資料型態 ### 整數(int) 整數 Ex: :::info 123 321 456 ::: ### 浮點數(float) 有小數點的數字 Ex: :::info 1.2 2.3 3.333 ::: ### 字串(string) 文字,注意數字也可以是字串型態!!! 只要被放在兩個"裡面,電腦就會認定裡面的資料是字串,運算方式也會不一樣,下面細說。 Ex: :::info "Hello World!" "Hello" "world!" "中文" "123" ::: ### 布林值(bool) 這個型態只有兩種可能的值,就是對和錯(真和假),用來存放邏輯結果的一種型態,例如我要存放3>7的結果,我就會用bool來存,可想而知3>7這個敘述是錯誤的 Ex: :::info True False ::: ### 有順序,可變動的列表(List) Ex: :::info [123,234,1,2,3] ["helo","world","ahoy!"] ::: ### 有順序,不可變動的列表(Tuple) Ex: :::info (123,234,1,2,3) ("hello","world!","wryyyy") ::: ### 集合->無順序(set) Ex: :::info {123,234,1,2,3} {"hello","world!","A"} ::: ### 字典(類似C++的STL map) (Dictionary) Ex: :::info {"apple":"蘋果","mywife":"雷姆"} ::: ## 基本輸入輸出(input(),print) ### 輸出(print) python輸出語法為print(變數或是值) 例如我能: ```python= a = 123 print(a) print(123) print("sssss") ``` 輸出就是顯示在你的結果畫面上。 ### 輸入(input()) 基本的python輸入方法 python是用input()這個函式去做輸入的操作 input()函式小括號裡面可以放,也可以不放參數,裡面的參數是用來提示使用者輸入的,例如我寫input("請輸入姓名"),程式執行後的結果會先跳出請輸入姓名,這邊對你的輸入並不會造成任何影響,只是單純提示你這格要輸入什麼,為什麼需要使用者輸入? 程式語言就是人類跟電腦溝通的語言,你當然需要跟電腦說話,而不是只看電腦自己執行輸出而已。 這邊特別注意一點!!! **input()函式預設輸入資料的型態是字串** 以下舉一個例子: ```python= num = input("請輸入數字") print(num/2) #output: #error ``` 會發現發生錯誤了,因為你把輸入的值存到num這個變數,num這時候的型態是字串,即便你輸入數字,程式執行到第二行的時候會印出你輸入數字除以二,看似正常但你有沒有發現字串string和整數int是不能做運算的,因此跳出錯誤。 要修正這個問題很簡單,就是在輸入後把輸入值轉成整數。 看code ```python= num = input("請輸入數字") num = int(num) print(num/2) #input: #4 #output: #2 ``` 還是很難理解的人可以去下面的醬汁看詳細介紹。 [醬汁source](https://ithelp.ithome.com.tw/articles/10212286) ## 運算子 ### 數字 "+" 加 "-" 減 "\*" 乘 "/" 除 "//" 整數除法 "\**" 做次方(n\**0.5就是對n開根號) "%" 餘數 ```python= x = 3 x = x + 1 print(x) #這時候x的值是4,因為程式會先做右邊再把答案放到左邊的變數 #output: #4 ``` 上面的 x = x + 1 可以縮寫成 x += 1 ## 字串運算 ### 拼接兩個字串用+ ```python= s = "Hello" + "World!" print (s) #output: #Hello World! ``` 也可以寫成這樣 ```python= s = "Hello" "World!" print(s) #output: #Hello World! ``` ### 跳脫字元\(印出") ```python= s = "hell"o" print(s) #error ``` 會發現這樣寫跳錯誤,原因就是電腦只讀到"hell",這時候就要把l和o之間的那個"的效果去掉,只要在前面加上\就可以了(如下) ```python= s = "hell\"o" print(s) #output: #hell"o ``` ### 換行符號\n(不想要所有文字都擠在一行) ```python= s = "hello\nWorld!" print(s) #output: #Hello #World! ``` 或是這樣寫 ```python= s = """hello World!""" print(s) #output: #Hello #World! ``` 用三個引號就可以直接在裡面按Enter換行 ### 乘法 ```python= s = "rero!" ss = s * 3 print(ss) #output: #rero!rero!rero! ``` ### 取得字串中某個字元(string[index]): ```python= s = "nekopara" # 01234567 對應的位置(index),從0開始 print(s[2]) #output: #k ``` ### 取得字串中一段子字串(string[begin(include):end(not include)]): ```python= s = "nekopara" # 01234567 對應的位置(index),從0開始 print(s[2:4]) #output: #ko ``` **begin**不填就是從0開始到end **end**不填就是begin到最後一個 ## 有序列表的基本運算 ### 取列表中的值 ```python= l = [12,23,34,56,78] print(l[0]) #output: #12 ``` 其實用法跟字串差不多 這邊特別提到刪除某段元素的方法 ```python= l = [12,23,34,56,78] print(l) l[1:3]=[] print(l) #output: #[12, 23, 34, 56, 78] #[12, 56, 78] ``` 這邊刪除了index1到index3(不包含),也就是23,34(index(1~2))這兩個元素,因此l這個list從[12, 23, 34, 56, 78]變成[12, 56, 78] ### 取得列表長度len(列表名稱) ```python= l = [12,23,34,56,78] lenth = len(l) print(lenth) #output: #5 ``` ### 加法 ```python= l = [12,23,34,56,78] print(l) l = l+[33,44] print(l) #output: #[12, 23, 34, 56, 78] #[12, 23, 34, 56, 78, 33, 44] ``` ### 乘法 ```python= l = [12,23,34,56,78] print(l) l = l*2 print(l) #output: #[12,23,34,56,78] #[12,23,34,56,78,12,23,34,56,78] ``` ### 修改某索引的元素值 有一個列表l = [12,23,34,56,78] 如果要直接修改第一項,也就是l[0]的話可以直接打l[0]=某數 要注意!!這樣寫會直接蓋掉原本l[0]的值 **只有List可以進行這個操作,Tuple這樣做會錯誤,因為Tuple不能變動** ```python= l = [12,23,34,56,78] print(l) l[0] = 69 print(l) #output: #[12, 23, 34, 56, 78] #[69, 23, 34, 56, 78] ``` 可以看到l[0]的值被替換成69了,原本的12也不見了 ### 多層列表 在列表裡面放列表,取值的話就用兩個[],例子如下: ```python= l = [[123,456,789],[234,567,890]] print(l) print(l[0]) print(l[0][2]) #output: #[[123, 456, 789], [234, 567, 890]] #[123, 456, 789] #789 ``` 可以看到第二行輸出l這個列表裡面index[0](第一項)的列表[123, 456, 789]。 第三行則是輸出在第一項列表中的index[2](第三項)的元素值789。 倘若第一項列表中的第三項又是一個列表,想一想會輸出什麼? 這邊出個小題目 ```python= l = [[123,456,789],[234,567,890]] l[0][0:2] = [5,5,5] print(l[0]) #output: #猜猜看是什麼? ``` :::spoiler 答案 [5,5,5,789] ::: ## 集合、字典的基本運算 ### 判斷某資料是否在集合中(元素 in 集合)or(元素 not in 集合) ```python= s1 = {6,3,4,2,9} print(3 in s1) print(87 in s1) print(3 not in s1) print(87 not in s1) #output: #True #False #False #True ``` 這邊有一個集合s1,我想知道3和87是否在集合中,所以我用in這個語法去檢查。 3是有的,所以會輸出True 87不在集合中,所以會輸出False not in 就是檢查3和87是不是不在集合中 3是有在集合中的,所以"3不再集合中"這個敘述是錯誤的,因此輸出False 87確實不在集合中,因此輸出True ### 交集(集合1&集合2) ```python= s1 = {6,3,4,2,9} s2 = {2,3,4,6,1} s3 = s1&s2 print(s3) #output: #{2, 3, 4, 6} ``` 我想知道s1和s2的交集(兩個集合中有那些元素是重複的),所以我用&這個語法去把他們交集的集合存在s3,很明顯的,s1和s2交集(重複的元素)有2,3,4,6這四個元素。 ### 聯集(集合1|集合2) ```python= s1 = {6,3,4,2,9} s2 = {2,3,4,6,1} s3 = s1|s2 print(s3) #output: #{1, 2, 3, 4, 6, 9} ``` 聯集(兩個集合中所有元素,不會重複),聯集要用|這個語法。 ### 差集(集合1-集合2) ```python= s1 = {6,3,4,2,9} s2 = {2,3,4,6,1} s3 = s1 - s2 print(s3) #output: #{9} ``` 差集(從s1中刪去和s2重複的元素),在這邊可以看到s1和s2重複的元素有2,3,4,6,因此s1和s2做差集的運算後會得到~~6~~,~~3~~,~~4~~,~~2~~,9,只剩下{9}, ### 反交集(集合1^集合2) ```python= s1 = {6,3,4,2,9} s2 = {2,3,4,6,1} s3 = s1 ^ s2 print(s3) #output: #{1, 9} ``` 反交集(兩個集合中不重複的元素),s1和s2重複的元素有2,3,4,6,把兩個集合都扣掉這些元素剩下的就是反交集的集合元素了,s1扣完剩下{9},s2扣完剩下{1},最後s1^s2的結果就是{1,9}。 ### 拆解字串成集合set() ```python= s = set("apple") print(s) #output: #{'l', 'e', 'p', 'a'} ``` 這邊把apple拆成一個集合,集合的特性就是不會重複元素,所以最後輸出a,p,l,e,這邊的順序是隨機出現的,每次編譯都會有不同結果。 ### 字典(key-value key值配對value) 字典型態的寫法:{"key1值" : "key1值對應到的值","key2值" : "key2值對應到的值",...} 對應到的值可能是字串、整數...等等,不一定只是數字。 ```python= d = {"ahoy!":"寶鐘瑪琳","peko!":"兔田配可拉","A":"噶嗚·古拉"} print(d["A"]) #output: #噶嗚·古拉 ``` 這邊我想印出字典d中key值為A對應到的值,可以看到輸出是噶嗚·古拉。 ### 判斷字典中是否存在某key值(in / not in) 注意!!這邊只能判斷key值,無法判斷key對應到的值 ```python= d = {"ahoy!":"寶鐘瑪琳","peko!":"兔田配可拉","A":"噶嗚·古拉"} print("peko!" in d) print("Watame" in d) print("寶鐘瑪琳" in d) #output: #True #False #False ``` 這邊我在字典d中找是否有key值為peko!,答案是有的,因此輸出True 然後我找是否有Watame,答案是沒有,因此輸出False 最後我找是否有**key值**為寶鐘瑪琳,會發現雖然有對應到的值裡面有寶鐘瑪琳,但是key值中並沒有,因此輸出False not in 就不多說了,上面有說明。 ### 刪除字典中元素(del 字典名稱["key值"]) ```python= d = {"ahoy!":"寶鐘瑪琳","peko!":"兔田配可拉","A":"噶嗚·古拉"} print(d) del d["peko!"] print(d) #output: #{'ahoy!': '寶鐘瑪琳', 'peko!': '兔田配可拉', 'A': '噶嗚·古拉'} #{'ahoy!': '寶鐘瑪琳', 'A': '噶嗚·古拉'} ``` 這邊我刪掉了"peko!"這個key值以及他對應到的值"兔田配可拉"。 ### 字典生成式(字典名稱 = 變數 : 變數 for 變數 in 列表) ```python= d = {i:i*i for i in [2,3,4]} print(d) #output: #{2: 4, 3: 9, 4: 16} ``` 這邊程式的邏輯很簡單,先看右半邊"for i in [2,3,4]",就是說i要分別帶入2,3,4這三個數進去,進去哪裡呢?進去前面的i:i\*i,帶入後就能得到2:4,3:9,4:16,這樣一個字典就生成出來囉! ## 流程控制:if 判斷式(if ,elif , else) ### 基本語法、結構 ```python= if 條件1: 執行敘述(條件1True時執行) elif 條件2: 執行敘述(條件2True時執行) elif 條件3: 執行敘述(條件3True時執行) else: 執行敘述(上面都條件都沒True時才會執行) ``` 規則: elif可以無限多個,也可以0個 else只能有1個或是0個 if可以獨立存在,elif和else必須對應到if,不能單獨存在 if、elif條件後面記得打":",並且在下一行縮排(四個空白或是按一下Tab鍵) else就是第一個if沒True(False),接下來的elif也都沒True(False)的情況下才會去執行else,就是剩下的情況,你可以決定剩下的情況要執行什麼敘述,也可以什麼都不做(不加else)。 ![](https://i.imgur.com/4Mx0WvU.png) ### if的各種可能一(if) ```python= score = input() score = int(score) if score > 60: print("Pass!") #input: #61 #output: #Pass! ``` 這邊輸入了一個整數,並且存在score這個變數裡,使用者輸入61,第二行把輸入轉成整數,因為input預設輸入是字串(詳情看上面[#基本輸入](https://hackmd.io/WUL5MPOPR6KE1b4iw6hygQ?view#%E5%9F%BA%E6%9C%AC%E8%BC%B8%E5%85%A5input)),第三行在判斷score(使用者輸入)有沒有大於60,如果有就執行以下縮排程式碼 這邊我輸入了61,因為61>60這個敘述是對的(True),所以程式會執行第四行,也就是印出"Pass!"這個字串。 ```python= score = input() score = int(score) if score > 60: print("Pass!") #input: #59 #output: # ``` 這次我輸入59,一樣存在score裡面,然後在第三行的時候因為59>60這個敘述是錯誤的(False),因此程式不會執行第三行,也就是不印出"Pass!",最後程式就結束了,什麼都沒印出來。 ### if的各種可能二(if-elif) ```python= score = input() score = int(score) if score > 60: print("Pass!") elif score < 40: print("bad!") #input: #61 #output: #Pass! #input: #39 #output: #bad! #input: #50 #output: # ``` 這邊前四行都跟可能一一樣就不贅述了,後面多了elif就是說當你第一個條件沒達成(False)的時候,再去檢查elif的條件,如果有達成(True)就執行以下縮排程式碼,沒有的話(False)不執行 理解程式碼後再看我的輸入輸出。 我一開始輸入61,會先在第三行達成,就印出"Pass!",這時候考考你,程式會執行到第五行elif的地方嗎?答案是不會,**因為elif只會在if沒達成時才會執行到**。 第二次,我輸入了39,39>60是False,所以就往下面的elif看,第四行會直接跳過,這時候39<40是True,所以執行以下縮排程式碼,也就是第六行,印出bad! 第三次,我輸入50,50>60是False,所以就往下面的elif看,第四行會直接跳過,50<40是False,第六行跳過,程式結束什麼都不印。 ### if的各種可能三(if-elif-else) ```python= score = input() score = int(score) if score > 60: print("Pass!") elif score < 40: print("bad!") else print("???") #input: #61 #output: #Pass! #input: #39 #output: #bad! #input: #50 #output: #??? ``` 這邊前六行、前兩筆輸入都跟上面邏輯一樣,直到第七行出現else,else就是當以上的敘述都沒達成(False)時,執行以下縮排程式碼。 這邊第三筆輸入50剛好能讓上面if-elif都為False,這時候就會執行else以下縮排程式碼,也就是印出"???"。 這邊還有一點要補充,中間elif可以放無限個,有點像濾網一樣,一層一層過濾,最後沉到最下面的就是else的部分。 ### if的各種可能四(if-else) ```python= score = input() score = int(score) if score > 60: print("Pass!") else print("???") #input: #61 #output: #Pass! #input: #39 #output: #??? #input: #50 #output: #??? ``` 這邊就如同我上述濾網的比喻一樣,中間沒有elif,當你輸入的數字不大於60,就會直接沉到最底,也就是else的部分,輸出"???"。 最後補充一點,學過其他語言的人可能會知道switch結構,在Python中是沒有switch-case這種結構的寫法,當然你要用奇葩的寫法寫出來也不是不可能實現。 ## 函式 什麼是函式? 函式就像是一台機器,你放入一些東西--->得到新的東西 通常函式後面都有一個小括號(),裡面會放資料(參數),至於放什麼資料、要放幾個就看這個函式的使用方法,也有可能不放任何東西。 舉例來說:max()函式是一個你放入兩個變數,就能幫你得出較大那個 ```python= a = 6 b = 9 max(a,b) #output: # ``` 會發現為什麼都沒東西出現,原因就是你沒有把結果印出來,程式確實執行了max()函式,但是沒有print出來,很多人都會問說:我明明用這個函式了,怎麼都沒效果,那有可能你沒有把結果存在變數或是直接印出來。 修正一下 ```python= a = 6 b = 9 print(max(a,b)) #output: #9 ``` 或是把它的結果存在變數(result)裡 ```python= a = 6 b = 9 result = max(a,b) print(result) #output: #9 ``` ## 迴圈基礎 for、while 什麼是迴圈呢? 試想今天你要輸出一個字串Hello,你會怎麼寫 ```python= print("Hello") #output: #Hello ``` 很簡單對吧! 這時候請你輸出10個Hello,怎麼寫? ```python= print("Hello") print("Hello") print("Hello") print("Hello") print("Hello") print("Hello") print("Hello") print("Hello") print("Hello") print("Hello") #output: #Hello #Hello #Hello #Hello #Hello #Hello #Hello #Hello #Hello #Hello ``` 是不是覺得複製貼上而已很簡單? 其實有更好的寫法,這時候就需要使用到迴圈了 ### 基本語法、結構 #### while ```python= while 條件(布林值): 當條件為True時執行敘述 ``` 當程式執行到while時,會先檢查while後面的條件是否為True 是(True)的話-->執行敘述 否(False)的話-->跳過,就像if條件為False時不執行以下縮排程式碼 糖炒栗子 ```python= n = 1 while n<5: print(n) n = n+1 #output: #1 #2 #3 #4 ``` 這邊程式碼就是設定n的初始值是1 當n<5這個敘述是True的時候(也就是n小於5的時候),印出n,然後n加1 為什麼只到4而已?因為當n加到5的時候,n<5的敘述就不成立就不會印出n,迴圈就會跳到迴圈外。 while會一直執行到條件為否(False)為止,所以請注意不能一直讓條件為True,會進入無限迴圈,你的程式就會永遠停不下來。 ```python= n = 1 while n<5: print(n) #output: #1 #1 #1 #1 . . . . . . ``` 當你少加了n=n+1會發生什麼事? 你的while會一直觸發導致程式陷入無限迴圈,所以在使用while的時候要特別注意**終止條件**,以免程式陷入無限迴圈。 終止條件通常寫在while後面或是while裡面寫一個if ```python= n = 1 while n<5: print(n) n = n + 1 ``` or ```python= n = 1 while True: if n<5: print(n) n = n + 1 ``` 上下兩個都是一樣的意思,不過大家會比較喜歡上面那種寫法。 #### for 基本結構就是 ```python= for 變數 in 字串或是串列: 敘述 ``` 這樣寫你的變數就像是一隻百變怪,每次迴圈執行到這行的時候依序變成那個寶可夢。 炒栗子 ```python= pokemon_ball = ["皮卡丘","三地鼠","巴大蝶","素利柏"] for Ditto in pokemon_ball: print(Ditto) #output: #皮卡丘 #三地鼠 #巴大蝶 #素利柏 ```