# 資料型態與變數 ## 一、文字型(string/char) : 存放文字的資料型態 以雙、三引號包住想要存放的字串(**string**) ex : "Hello World !", '''45002931:$''', "你我,他" 以單引號存放**單一字元**(**char**) ex : 'a', '1' --- ## 1.1常用方法及函式 ### 1. len(str) 使用len(字串)可以得到字串長度 > 範例: ```python=1 print(len("NCU CSIE")) //印出: 8 ``` ### 2. str + str 可以使用加號(+)來黏合字串 > 範例: ```python=1 print("Str" + "ing") //印出: String ``` ### 3. str * 次數 可以使用乘號(*)來重複印出字串 > 範例: ```python=1 print("Str" * 3) //印出: StrStrStr ``` --- ### 4. Index 電腦會將字串中的字元編號,當我們想特別使用字串裡的某個字時,可以使用index去檢索 > 範例: <font size = 6>str = "NCU CSIE"</font> | | N | C | U | | C | S | I | E | | ----- | --- | --- | --- | --- | --- | --- | --- | --- | | index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ```python=1 print(str[0]) print(str[1:6]) //注意:這裡是1~5不包含6喔! print(str[-1]) //印出最後一位 print(str[:]) ``` > 輸出 ``` N CU CS E NCU CSIE ``` --- ### 5. str.split() 當我們想以空白或其他字元分割字串時可以使用 `str.split()` ,若無指定則預設為空白 <font size = 5>str.split(想分割的字元)</font> > 範例: ```python=1 str = "NCU CSIE IS VERY GOOD !" //以空白分割字串 print(str.split()) //以"E"分割字串 print(str.split("E")) //這時候再配合(四)教的index就可以輕鬆獲得想要的字串 print(str.split()[0]) ``` > 範例: ``` ["NCU", "CSIE", "IS", "VERY", "GOOD", "!"] ["NCU CSI", "IS V", "RY GOOD !"] NCU ``` #### 使用時機範例: ```python=1 str = input() //假設我們輸入:3 10 37 三個數字以空白隔開 若我們要分別存取這三個數字,就可以利用split(): a = str.split()[0] b = str.split()[1] c = str.split()[2] ``` ## 二、數字(int/float) : 存放數字的資料型態 int: 整數型數字 ex:`-1`, `2147483647` float: 浮點數型數字 ex:`3.14`, `2.7` #補充:在python中不需要分各種類型的數字,但在其他程式語言中要分清楚 ## 2.1特殊運算 ### 1. 整數除法及小數除法 1. 小數除法 (就是平常的除法) ex : `6 / 2 = 3`, `10 / 4 = 2.5`, `7 / 6 = 1.6666667` 2. 整數除法 (只取整數),使用兩個除號 ex : `7 // 6 = 1`, `3 // 6 = 0` ### 2. 指數 使用兩個乘號 `**` ex : `2 ** 2 = 4`, `2 ** 2 ** 2 = 16`, `2 ** 10= 1024` ### 3. 取餘數 / mod 使用 `%` 來獲得餘數 ex : `10 % 4 = 2`, `20 % 2 = 0`, `17 % 6 = 5` ## 三、邏輯型(boolean) : 存放True/False的資料型態 可以使用 `0` 或空字串 `""` 代表 `False`,而其他非零數字和字串都是 `True` ,但最常使用的是 `True(1)`, `Flase(0)` 邏輯型最常使用在後面章節的 if-else 句型中,可以當作判斷某件事情發生的開關,或是某個條件被觸發時的訊號 > 範例: ```python=1 TomIsGirl = False or 0 TomIsBoy = True or 1 print(5 > 10) // 印出False print(10 > 7) // 印出True print(10/2 == 5) //印出True # 在電腦中 == 代表平常在用的等於 print(11%2 != 0) //印出True # 而!= 代表不等於 ``` ## 四、資料型態間的轉換 #### 學完各種資料型態後,我們其實可以把資料轉換成不同的型態 ### Casting 型別轉換 | 型別轉換 | 將傳入的物件轉型為 | | ----------- | -------- | | int(object) | 整數 | | | |float(object)| 浮點數 |bool(object) | 布林值 |str(object) | 字串 > 範例 ```python=1 print(int(45.23)) //印出 45 print(str(678)) //印出 678 print(bool(78)) //印出 True print(float(True)) //印出 1.0 ``` ### type(物件) #### 使用type()函式來確定物件的資料型態 > 範例: ```python=1 d = "Hello World" e = 10.23 f = 11 print(type(d)) print(type(e)) print(type(f)) ``` > 輸出: <class 'str'> <class 'float'> <class 'int'> ### 進位轉換 將數字轉成二進位bin()、八進位oct()、十六進位hex() | 進位轉換 | 將數字轉為n進位 | | ----- | -------- | | bin() | 二進位 | | oct() | 八進位 | | hex() | 十六進位| ### 常用的型別轉換: > 範例: ```python=1 str = input() //假設輸入為 12 34兩個數字 #input()讀取時為字串!!! num1 = str.split()[0] // "12" num2 = str.split()[1] // "34" ``` 若我們想要將num1+num2的值印出來: print(num1 + num2) // 印出1234 這時候因為num1, num2是字串, 所以"12"+"34"印出來為1234 所以這時候我們需要把num1, num2轉成數字才能進行運算並得到我們想要的結果 print(int(num1) + int(num2)) //印出46 # 變數 變數是可以**存放資料**的一個**容器** 變數名稱只能是**英文、數字、底線的組合**,且名稱開頭**不能是數字** 錯誤範例: `#a`, `1234abc`, `a;bc` 正確範例: `apple`, `Aabc123`, `wow_22` ## 一、 宣告變數 **<font size = 4>變數名稱(自訂) = 想要存放的資料</font>** > 範例: ApplePrice = 100 fruit = "Apple" Check = True --- #補充: 其他程式語言要多寫一個資料型態 **資料型態 變數名稱(自訂) = 想要存放的資料** > 範例: string fruit = "apple" int number = -23 float = 3.14 bool check = true --- ## 二、 變數內的資料處理 若我們想將一個變數裡的數字加1 要寫成 `number = number + 1` 或是 `number += 1` > 範例: ```python=1 number = 10 number = number + 1 print(number) //印出11 ``` > 範例: 若我們想將驚嘆號加到變數裡的字串的後面,可以寫成 `str = str + " !"` 或是 `str += "!"` ```python=1ㄋ str = "I love coding" str += " !" print(str) // 印出 I love coding ! ``` ## 三、 變數優點 ### 1. 可重複使用 > 範例: ```python=1 money = 1000 print("I have " + str(money*4) + " dollars.") print("Iris has " + str(money*3) + " dollars.") print("Michael has " + str(money*2) + " dollars.") ``` > 輸出: I have 4000 dollars. Iris has 3000 dollars. Michael has 2000 dollars. ### 2. 增加可讀性 > 範例: The_longest_English_word = "Pneumonoultramicroscopicsilicovolcanoconiosis" ### 3. 方便修改 > 範例: fruit = "apple" print("I like " + fruit + ".") print("Tom likes " + fruit + ", too.") print("But Cindy doesn't like " + fruit + ".") > 輸出1 I like apple. Tom likes apple, too. But Cindy doesn't like apple. 這時候我們把fruit裡的資料改成banana,其餘不變 fruit = "banana" print("I like " + fruit + ".") print("Tom likes " + fruit + ", too.") print("But Cindy doesn't like " + fruit + ".") > 輸出2 I like banana. Tom likes banana, too. But Cindy doesn't like banana. 所有的apple都會變為banana了 因此使用變數可以方便我們管理資料以及增加我們的效率 # 練習題 ## 一、是非題 1. ( ) 只要使用雙引號括起來的任何字元都是屬於文字型(字串) 2. ( ) `2**3 ` 是`2乘以3再乘以3`的意思 3. ( ) `length(字串)` 可以得到字串的長度 4. ( ) 若要分辨`23841039`1是不是偶數,我們可以判斷 `238410391 % 2` 是不是等於`0` 5. ( ) 若想要以空白分割字串,可以使用 `split(字串)` ## 二、選擇題 1. 以下何者為變數的優點 a. 可重複使用 b. 增加可讀性 c. 方便修改 d. 以上皆是 2. 請問以下程式碼的輸出為何者? a. 17 b. 71 c. 89 d. 98 ``` a = input() //輸入為8 b = input() //輸入為9 print(b+a) ``` ## 三、程式題(大家可以在自己的編譯器上試試看) 小百今天體育課測100公尺,但在起跑時不幸摔倒,當他去問體育老師自己跑幾秒時,老師卻只委婉地跟他說他的平均速率是5m/s,請完成下列程式碼幫助小明得到自己的成績。 **hint:平均速率(speed) = 總距離(distance)/總時間(time)** ``` distance = speed = time = //請完成前三行程式碼 print("小百100公尺跑了"+time+"秒!") ``` 體育老師幫大家100公尺測完秒數後,想要把大家的平均速率都算出來,請幫他寫出一個程式碼,要有兩個輸入(時間、同學名字),輸出為平均速率 **hint:可以參考前一題的程式碼** ``` distance = time = name = speed = //請完成前四行程式碼 print(name+distance+"公尺的平均速率為"+speed+"m/s!") ```