# Python 作業的截圖可以交到 ncucsiepyjh.gmail.com 或是用手機拍照,或存成文字檔,於下次上課交給助教 ## 安裝Python及Pycharm ### 安裝python https://www.python.org/downloads/windows/ ![](https://i.imgur.com/RS6fMkP.jpg) ![](https://i.imgur.com/UvUSunB.jpg) **接著按Install Now** --- ### 安裝pycharm https://www.jetbrains.com/pycharm/download/#section=windows :::success **按右邊的community的download** ::: ![](https://i.imgur.com/tiEIiIx.jpg) :::success **確認選項都跟圖片一樣再按next(第三張的creat associations也要打勾)** ::: ![](https://i.imgur.com/mYRKgx1.jpg) ![](https://i.imgur.com/lV9ynLR.jpg) ### 創建project :::success 按New Project ::: ![](https://i.imgur.com/vjgxhzU.png) :::success 接著按create ::: ![](https://i.imgur.com/5UxTdJN.png) ### 創建python :::success 創一個python檔 ::: ![](https://i.imgur.com/ZNIt8ks.png) :::success 為檔案命名 ::: ![](https://i.imgur.com/qiDFmts.png) ## 資料型態 ### 資料型態介紹 * **甚麼是資料型態?** 資料型態就是在Python中,各種資料,例如:數字、文字、串列等等物件的型態。 ![](https://i.imgur.com/ycRCl7W.png) * **常見的資料型態有:** 數字:整數(int)、符點數(float) 布林值:真(True)、假(False) 文字:字串(String)、字元(Char) 其他,如:序列(List)、集合(Set)、字典(Dictionary)、元組(Tuple) ### 整數型態(int) * **整數,即包括正整數、負整數、零這三個範圍的數字** 例如: ``` 正整數:1、100、948 負整數:-2、-14、-6 零:0 ``` ### 浮點數型態(float) 浮點數,即我們常見到的“小數” 隨著點的位置的改變,我們稱作“浮動(floating)” ,因此小數又被稱作浮點數 ```python= x=10.0 y=-5.5 ``` ### 型態轉換 轉換成整數的形態時,使用int( ) 轉換成浮點數的形態時,使用float( ) :::warning 註:浮點數轉整數是無條件捨去法。 ::: ```python= x=int(10.5) ## x=10 y=float(5) ## y=5.0 ``` ### 布林值Boolean(bool) 布林值僅有兩種,真(True)以及假(False) 有時我們也用1來表示真;用0來表示假。 ```python= b1=True b2=False ``` ### 運算子 * **什麼是運算子(符)?** 運算符就是連接左右兩邊元素,並產出結果的符號。 ``` 2+1==3 6*7==42 (2+1==3) and (6*7==41) → False ``` #### **算數運算子** ![](https://i.imgur.com/66M8biI.png) #### **指派運算子** ![](https://i.imgur.com/z7BUJcB.png) #### **關係運算子** ![](https://i.imgur.com/eE119ho.png) #### **邏輯運算子** ![](https://i.imgur.com/cfODEYx.png) ## 輸入(Input)與輸出(Output)(I/O) ### 輸出 在Python中,我們使用print( )來輸出我們想要的文字(Words)或數字(Number) 但是,如果在數字外加上雙引號或單引號,這個“數字”會被Python判定為“文字” ``` print(123) //int print("123") //字串 ``` ### 合併輸出 當我們想合併字串、字元或數字時,我們可以直接使用+來完成 ```python= print("hello"+"world") ``` ``` helloworld ``` ### 輸出多次 當我們想重複輸出一個字或字串時,我們可以直接使用*來完成 ```python= print("123"*5) ``` ``` 123123123123123 ``` :::info 註:程式碼輸出時‘ , ’(逗號)與‘ + ’(加號)的差異: 輸入: ```python= print("a"+"b"+"c") print("a","b","c") ``` 輸出: ``` abc a b c ``` ::: ### end=“ ” 當我們想要讓輸出後不換行,我們可以使用end=“ ”來達成我們的目的,我們不難發現,當沒有end=“ ”存在的時候,系統預設的print( )在最後會自動換行 ```python= print("abc",end="def") print("123",end="") print("456") ``` ``` abcdef 123456 ``` ### 輸入 當我們要輸入數字或文字到電腦時,我們在程式碼編譯處寫上input( ) 如: ```python= x = input() ``` 意思是將使用者輸入的內容指派給x 想讓使用者在輸入前看到你想問的問題可以這麼做: ```python= x = input("你要不要問問神奇海螺?") ``` 這時使用者會看到: ``` 你要不要問問神奇海螺? ``` ### 篩選輸入的資料型態 在前面我們有提到,使用int( )、float( )可以改變數字的型態 當然,我們也可以篩選輸入的資料型態,例: ```python= x = int(input()) ``` 當輸入的內容無法被轉換成整數時(字元、字串),系統會顯示錯誤 例:輸入hello ![](https://i.imgur.com/zs9Z8RB.png) ## 字串切片(Slicing;Slice) 首先,我們要先聊聊字串中每一個字的位置是如何被編排 ![](https://i.imgur.com/VBaILEM.png) :::warning 記住是從0開始編號! ::: ### 字串取值 利用[ ]來取值 ```python= x = "hello world" print("第6個位子是:",x[6]) ``` ``` 第6個位子是: w ``` ### 起始點(Start)、停止點(Stop)以及間隔(Step) start 預設為文字編號第一個 stop 預設為文字編號最後一個 step 預設為1 ![](https://i.imgur.com/SXEEnlT.png) ```python= x = "hello world" y = "12345678" print(x[2:8]) print(y[1:6:2]) print(y[::-1]) ``` ``` llo wor 246 987654321 ``` ### 預設情況以及無效情況下的切片 ```python= x = "hello world" print(x[7:5:3]) //無效輸入,會印出null(無) ``` ### len( )函式 假設今天有一個字串x,要知道它的大小就是使用len( ),得到的結果就是x的大小囉! ```python= x = "123456" print(len(x)) ``` ``` 6 ``` ### .count( )方法 .count( )用在檢查一句話裡有沒有某個字或某個詞的時候 ```python= x=“protocol” print(x.count(‘o’),len(x)) ``` ``` 3 8 ``` ### If 當程式流程在進行的過程中,需要根據某條件決定是否執行接下來的動作時,就需要用到 if 敘述。 其語法如下: ``` if 情況1: 動作1 (若情況1為True) ``` 意思是當情況1為**True**時,執行動作1。 ### 冒號與縮排 Python沒有像其他語言一樣採用{ }或其他方式分隔程式碼塊,而是採用**冒號**和**縮排**來區分程式碼層次。 縮排的空格數量是可變的,但是所有相同層次的程式碼塊都必須有相同的空格數量。 ### If – Else if 敘述還可以搭配 else 來使用,讓程式在 if 條件不成立時,便去執行 else 底下所定義的動作。 其語法如下: ``` if 情況1: 動作1 (若情況1為True) else: 動作2 (若情況1為False) ``` 意思是當情況1條件為**True**時,執行動作1; 情況1條件為**False**時,執行動作2。 #### 範例 小明決定向小美告白: ``` if 小美接受: 小明獲得女朋友:D else: 小明獲得好朋友QQ ``` ### If – Elif – Else 當需要判斷的情況有很多種時,我們可以使用 if – elif – else 來達成我們的目的。 ::: warning 註: elif 的數量沒有限制。 ::: 其語法如下: ``` if 情況1: 動作1 (若情況1為True) elif 情況2: 動作2 (若情況1為False,且情況2為True) … elif 情況n-1: 動作n-1 (以上情況皆為False,且情況n-1為True) else: 動作n (若以上情況皆為False) ``` #### 範例 小明被小美拒絕很傷心,想要回家討拍,所以去火車站買火車票,發現火車站用年齡來區分車票: ``` age = int(input()) if age < 18: print("學生票") elif age >= 65: print("敬老票") else: print("全票") ``` ### 巢狀If 有的時候需要判斷的可能狀況有很多種,且須依照不同情況有不同的子情況,這時候就可以使用巢狀if結構。 > 簡單來說就是if裡面還有if。 ``` if 情況1: if 情況1-1: 動作1-1 (若情況1-1為True) elif 情況1-2: 動作1-2 (若情況1-2為True) else: 動作1-3 (若情況1為True,且情況1-1、1-2為False) elif 情況2: 動作2 (若情況1為False,且情況2為True) else: 動作3 (若以上情況皆為False) ``` #### 範例 小明被小美拒絕後,在車上想著他為什麼會被拒絕,恰好他下車後去了一間餐廳吃晚餐,分別有學生優惠打8折與生日優惠送女友的方案: ``` if 小明是學生: if 小明生日: 學生優惠8折+生日優惠送女朋友 else: 學生優惠8折 elif 小明生日: 生日優惠送女朋友 else: 沒有優惠 ``` ## 迴圈Loop 在程式中處理資料時,時常會需要**重複執行**某些相同的步驟。而迴圈的功用就是讓指定的程式在符合特定條件下,一直重複執行某些相同的步驟(**迭代**)。我們可以利用迴圈(Loop)來進行重覆性的資料輸入、處理與輸出。 假如我們今天要印出「你好!」100次,最直覺的想法是: ```python= print("你好") # 第一行 print("你好") # 第二行 print("你好") # 第…行 print("你好") # 第100行 ``` 但是這樣100行print( )很浪費時間,當面對更多筆資料的時候,我們不想要一行一行的寫。 因此,我們使用**迴圈(Loop)。** :::warning 「迴圈」就像是一台機器,這個機器一直做重複的事,我們只需要把東西丟進去這個機器裡,他就會自動幫我們處理這些事情,節省了許多時間。 ::: ### range( )函式 在介紹for迴圈前,我們要先介紹range( )函式,這個函式常與for一起使用。 range(a) 能夠生成從 0 ~ (a的前一個) 的數列,以下是他的語法: ```python= range(start, stop, step) # 與string的切片相同 ``` start跟step可以省略,stop代表要到多少。 (start預設為0,step預設為1) #### 範例: ```python= range(10) # 0,1,2,3,4,5,6,7,8,9 range(3, 10) # 產生 3,4,5,6,7,8,9 range(2, 11, 2) # 產生 2,4,6,8,10 range(10, 0, -1) # 產生 10,9,8,7,6,5,4,3,2,1 ``` ### for迴圈 語法: ``` for 變數 in 序列: 想要重複執行的動作 ``` for 會依序從序列裡取得元素,並重複執行動作1。 :::warning 註:序列可能為一連串清單資料,一組數字或一個名單。 ::: #### 範例: 小明因為被拒絕很難過,所以每天翹課,有一天老師發現不對勁,於是開始點名: for 學生 in 點名表: print(學生) 這樣for就會從點名表第一個人開始點到最後一個。 當for與range一起使用: ```python= for i in range(10): print(i, end=" ") # 產生 0 1 2 3 4 5 6 7 8 9 for i in range(10, 0, -1): print(i, end=" ") # 產生 9 8 7 6 5 4 3 2 1 ``` ::: info range(start, stop, step)的概念與string的切片類似。 string的內容也可以用for來迭(ㄉ一ㄝˊ)代。 ```python= for char in "尖頭,給我納命來": print(char) ``` 產生: ``` 尖 頭 , 給 我 納 命 來 ``` ::: ### 巢狀for迴圈 何謂巢狀for迴圈? 簡單來說就是**迴圈裡面還有迴圈**,就如同早上我們所提到的巢狀if一樣,if裡面還有if。 ```python= for i in range(2): for j in range(3): print(char) ``` 產生: ``` 0 0 0 1 0 2 1 0 1 1 1 2 ``` 巢狀迴圈其實很像時鐘。 **內層迴圈→秒針;外層迴圈→分針。** 當內層迴圈執行一輪之後,外層迴圈才會進到下一項。 ### While迴圈 語法: while 判斷條件: 動作1 判斷條件等於True時,重複執行。 判斷條件等於False時,離開迴圈。 #### 範例1 一直翹課的小明讓賺很少的爸爸很頭痛,感覺學費都白繳了,錢包裡的錢越來越少: ``` while 錢包有錢: 錢包 -= 學費 print(“爸爸沒錢了”) ``` #### 範例2 ```python= i = 0 while i < 5: print(i) i = i + 1 ``` 產生: ``` 0 1 2 3 4 ``` Q. 如果我們把上面的程式碼刪去 i = i + 1 一行,會發生什麼事呢? `i < 5 永遠為True,while迴圈不會停止,會形成無限迴圈。` 遇到這種情況該如何解決呢? 我們可以使用**continue**和**break**這兩個語句來控制程式迴圈流程。 ### continue continue會結束本次迴圈,回到迴圈的開頭,並進入下一次的循環。 #### 範例 ```python= i = 0 while i < 5: if i == 2: i = i + 1 continue print(i, end=" ") i = i + 1 # 產生 0 1 3 4 for i in range(5): if i == 2: continue print(i, end=" ") # 產生 0 1 3 4 ``` ### break break會跳出整個迴圈。 #### 範例 ```python= i = 0 while i < 5: if i == 2: i = i + 1 break print(i, end=" ") i = i + 1 # 產生 0 1 for i in range(5): if i == 2: break print(i, end=" ") # 產生 0 1 ``` 有了break,我們能夠利用while迴圈進行重複輸入,並決定何時終止。 ```python= while True: n = input() if n == "end": break print(n) ``` ``` 輸入:10 輸出:10 輸入:hello 輸出:hello 輸入:end # 程式結束 ```