【Python基礎教學】變數&基本資料型態(上)【part-3】 === 目錄(Table of Contents) [TOC] --- 哈囉大家好,很感謝你點進本文章,我是一名高中生,是電腦社社團的社長,由於我並不是 Python 這方面非常精通的專家,所以若文章有些錯誤請見諒,也可向我指正錯誤。另外本文章的用意是作為電腦社社團的教材使用而編寫的。 接下來,讓我們進入正題。 上次我們介紹到 IDLE 開發環境的使用與教學,那麼我們學會使用工具後,接下來就來進一步的認識程式語言囉。 不過,在此之前,作者需要在此補充上次沒講到的部分:註解、副檔名的部分。 副檔名(Filename Extension) --- 副檔名是什麼? > 副檔名(Filename Extension)或稱「延伸檔名」、「字尾名」或「文件擴展名」,若在中國則稱為「後綴名」或「擴展名」,這些都是副檔名的意思。 副檔名具有下列一些性質: 1. 副檔名在主檔名的後面,以一個小逗點(半形)「.」分隔開來。 > 例如:「example.txt」的 txt 就是副檔名、example 為主檔名。 2. 副檔名的作用是讓系統決定當使用者想打開這個檔案的時候,要用哪種軟體執行。 3. 副檔名通常用來表示***檔案類型*** > 例如:Windows系統中的「.exe」是可執行檔,而「.doc」則是預設用 Microsoft Word 打開的 Word 檔案。 4. ***只有修改副檔名並不會將檔案轉換成另一種格式*** ***在這邊替各位提醒,千萬不要手動更改副檔名,你這樣做只是會讓這個檔案變得無法執行而已,所以若有轉檔工具請善加利用。*** 好,那麼將副檔名介紹完之後,我們回到我們的主軸 Python。在 Python 中,副檔名一律都是「.py」。 ![image](https://hackmd.io/_uploads/SJLApGDha.png) 註解(Comment) --- ![image](https://hackmd.io/_uploads/rkmDRGP26.png) 在 Python 中的註解寫成「#」,在以上的程式碼中,執行的時候不會執行「#」符號右邊的文字。當程式碼行數眾多時,註解能夠提醒我們哪一行程式碼是在幹嘛的。 除了「#」的註解以外,也有三個單引號或三個雙引號所組成的多行註解,請看以下圖片。 ![image](https://hackmd.io/_uploads/rkfRymPnp.png) :::success 註解(Comment):在 Python 中用「#」表示註解,「#」後面的任何字元、字串都不會被 Python 辨識成程式執行。 ::: 變數(Variable) --- 在數學上,我們也會使用變數,像是有些題目會假設 X = 10, Y = 5 等等。有些未知數的題目需要我們自己做假設,例如「設X為......」之類的。 其實我們早就有接觸到變數的概念了,不過變數在程式上面的意義其實跟數學上差異不大。 在 Python 中,我們不會講假設 X= 多少,而是會講宣告(declare) X= 多少。 > 變數就是為了方便在程式中調用記憶體中的值而改的名字。 宣告這個詞,其實就是在告訴電腦說,我要創造變數。變數的定義是用來儲存某些資料型態的資料。 什麼意思呢?其實你可以把變數想像成是一個容器,這些容器具有不同的形狀(型態),比如說三角形是整數(int)。然而我們今天宣告了一個變數為X,並且定義X為三角形。那當我們倒水進去三角形的容器,因為水會隨容器改變形狀,所以在容器裡面的水會變成三角形的形狀,也就是整數(int),這也說明了只要倒入液體進入 X 這個容器(變數)裡面,他只能是三角形,不會是其他形狀(型態)。 :::success 簡單講就理解! 變數(Variable):裝水的容器 資料型態(Data Type):容器的形狀 數值(Value):水 ::: 解釋了這麼多,那要怎麼宣告變數在Python裡面? 很簡單,只要這樣做即可: ```python= a = 0 print(a) # 輸出結果為0 ``` L1(Line 1):宣告變數名稱為 a,且指定(在程式語言中,等於、等號我們稱為指定或賦值)為0。 L2(Line 2):打印出變數 a 的值。 L3(Line 3):輸出變數 a 的值。 接下來以下會有一張圖片,請看: ![image](https://hackmd.io/_uploads/Hkj0HmPnT.png) 你是否發現,Python 與以往的程式語言不同,在 Python 宣告變數時,不須事先宣告「變數型態」,也就是它的形狀,就能夠自動變換形狀(型態)。這有個專有名詞稱為「隱式轉換」,Python 會自動將一種資料型態轉換為另一種資料型態,不需要我們去干預。 ### 多重指定 --- 在 Python 中,我們要替多個變數指定重複的值,我們可以這樣做: ![image](https://hackmd.io/_uploads/SkDiwXvna.png) 可以看到我替三個變數 a, b, c 皆指定數值 1,然後打印這三個變數的值,發現竟然真的全部都是 1。 在 python 中,若不想要一行一行輸入變數的值,我們可以這樣做: ![image](https://hackmd.io/_uploads/SJiTp7vha.png) 可以看到我將變數並行在一起指定變數值,然後並打印出四個變數之值。 資料型態(Data Type) --- 在 Python 中,總共有下列多種的資料型態: * Number(數字) * String(字串) * bool(布林) * List(列表) * Tuple(元組) * Set(集合) * Dictionary(字典) > 在 Python 中,並沒有所謂的原始資料型態(Primitive Type),所有資料型態都是物件。 > > 物件又分成可變(mutable)與不可變(immutable),不可變物件就跟他的名字一樣,一旦創建後其內容就不能再改變。 python 3.x 版的標準資料型態中: 不可變物件(3 個):Number(數字)、String(字串)、Tuple(元組); 可變物件(3 個):List(列表)、Dictionary(字典)、Set(集合)。 另外還有一些進階的資料型態,如:位元組陣列型態(bytes)。 若對於「什麼是原始資料型態、所有資料型態都是物件」不懂的話沒關係,這屬於比較進階的範疇,我們暫時先不用深度了解其原理。我們只要大概知道有這個東西即可。 ### 數字(Number) --- Number 可以分成 int, float, bool, complex(複數)。 ![未命名2](https://hackmd.io/_uploads/rkrCnQP36.png) 而在 Python 3.x 版 當中,只有一種整數型態名為 int,不像 C 語言還具有 long int, short int, unsigned int 等等,而值得一提的是 python 2.x 版本具有 long int。 :::info Python Tips: long int 是為了增加 int 的容量而發明的,而現今 py 3.x 的整數型態大多都遠遠超過當初 long int 的最大容量值。 名詞補充:溢位(overflow),當一個結果太大而超出資料型態所能容納的範圍時,就會發生溢位,但注意的是不會因此發生錯誤,而是會跑到負數的地方。 例如: C 語言的 long int 的範圍如下:-2,147,483,648 to 2,147,483,647 如果數值超過 2,147,483,647,實際數值是 2,147,483,648 的話,就會是 -2,147,483,648。 ::: 我們可以透過函數 type() 來查詢變數所指向的物件型態。 簡單來說:使用 type() 函數可以得知哪個變數或其他物件是屬於什麼資料型態的。 以下是一個範例: ![image](https://hackmd.io/_uploads/SyVNCQwhp.png) 可以看到我們使用 type() 這個函數,透過打印的方式知道這四個變數的資料型態。 另外再教給各位判斷資料型態的函數:isinstance() ![image](https://hackmd.io/_uploads/SJKoRXPna.png) 可以看到我在函數的框框裡的左邊輸入變數a的名稱,右邊則是輸入int,意謂我想要請一個人(這個人叫做isinstance()),幫我判斷這個變數是不是整數型態,就這樣。 接下來,當我們指定一個值時,Number 這個物件同時會被創建。 ![image](https://hackmd.io/_uploads/S1WgeNw3T.png) 比如說我們給 var1、var2 值為 10、20 好了。 我們可以使用關鍵字 del,來刪除一個或多個物件,語法如下: `del var1[, var2[, var3]......,varN]]]` 以下是刪除一個或多個物件的範例: ![image](https://hackmd.io/_uploads/HJEqlVwnp.png) ***請注意!若將一個物件刪除後,你還繼續用 del 刪除那個早就被刪除的物件,程式會出錯。*** ### 數字:小結 --- 1. Python 可以同時為多個變數賦值,如 a, b = 1, 2 、 a=b=c=1。這個叫多重指定。 2. Python 裡面只有一種整數型態,叫做 int。 3. Python 中,一個變數可以透過賦值指向不同型態的物件。舉例:a=1、a="string"、a=True、a=0.87,意思就是變數 a 可以自動轉變成不同型態,稱為隱式轉換。 4. 小補充:數值的除法包含兩個運算子:「/」傳回一個浮點數(單純除法而已),「//」傳回一個整數(就是整除)。 ### 字串(String) --- Python 中的字串用單引號 「**'**」 或雙引號 「**"**」 括起來,或同時使用反斜線 「\」 轉義特殊字元。 :::danger 單雙引號必須是成對!不成對會發生錯誤,如:「'ABCDEFG"」 ::: 像是這樣: **"你好嗎?"**、"Hello!" 字串顧名思義就是一個一個字、串在一起,而單一個英文字母,比如說:"a"、"b" 等等,我們稱其為「字元(char)」,而一個一個字元串在一起、黏在一起就成了字串。 而字串的擷取的語法格式如下: `變數[起始點:結束點:間隔]` ***注意:截取只會截取到結束點的前一個索引值,結束點的索引值不會截取。*** 我們先從這樣開始: ![image](https://hackmd.io/_uploads/SJauSEwh6.png) 可以發現擷取字串的格式並不是一定要填的,像是上面這張圖片,我只填了0,而這個0就是索引值。 接下來我們看一張圖片,能讓你充分了解索引值是什麼。 ![未命名3](https://hackmd.io/_uploads/H1X5LEDnT.png) 我們可以從以上的圖片知道,一個字元佔一個索引值,而這個索引我們可以理解成字元在字串中的位置。我們用排隊來說好了,我們把索引想像成是號碼牌,而這些字元(包括空格)都是站在隊伍上的人們,他們手中各持有一張號碼牌,也就是我們所稱的索引。而當我們下了一道指令:a[0],變數 a 是指隊伍,而在這個隊伍中,我們只要找拿著號碼牌0的人,而那個人便是「I」。 > 索引值以 0 為起始點,以 -1 為最右側開始,如圖片中的索引 12。 > 字串以「+」號連結,表示兩字串相互連接在一起。而對字串使用乘號「*」再加上數字n表示對該字串複製n次。 以文字敘述你可能會較片面理解,為了更熟悉字串的相關用法,我們來做以下範例: ![image](https://hackmd.io/_uploads/rJ1Ftdwnp.png) 輸出結果: ![image](https://hackmd.io/_uploads/SJZ5t_Dh6.png) ### 跳脫字元(Escape character) --- 在 Python 中想要使用轉義字元(或稱跳脫字元 -> Escape character),其實跟大部分程式語言是相同的,一樣使用「\」反斜線,再加上其他相關字母,像是「\n」表示換行的意思。如果我們不想讓反斜線發生轉義,可以在字串前面加上一個 r,表示原始字串: :::info 跳脫字元,就把它想像成是有特殊功用的字元。像「\n」不就是有別於一般字元的功用嗎? ::: ![image](https://hackmd.io/_uploads/ByTj-tPhp.png) > 注意:Python 沒有單獨的字元型態(char),一個字元就是長度為1的字串。 > > 與 C語言 字串不同的是,Python 字串不能被改變。向一個索引位置賦值,例如 word[0] = 'm' 會導致錯誤。 ### 字串:小結 --- 1. 反斜線「\」可以用來轉義,使用 r 可以讓反斜線不發生轉義。 2. 字串可以用 + 運算子連接在一起,用 * 運算子複製。 3. Python 中的字串有兩種索引方式,由左至右以 0 開始,從右至左以 -1 開始。 4. Python 中的字串不能被改變。 ### 布林型態(Boolean or Bool) --- > **布林型態即為 True False** 在 Python 中,True 和 False 都是關鍵字,表示布林值。你甚至可以將 True、False 視為電腦中的 0、1,1 為 True,0 為 False。 布林型態可以用來控制程式的流程,例如判斷某個條件是否成立,或是在某個條件滿足時執行某段程式碼。 **布林型態特點:** 1. 布林型態只有兩個值:True 和 False。 2. 布林型態可以和其他資料型態進行比較,例如數字、字串等。在比較時,Python 會將 True 視為 1,False 視為 0。 3. 布林型態可以和邏輯運算子一起使用,如 and、or、not。這些運算子可以用來組合多個布林表達式,產生一個新的布林值。 4. 布林型態也可以轉換成其他資料型態,例如整數、浮點數和字串。在轉換時,True 會被轉換成 1,False 會被轉換成 0。 ![image](https://hackmd.io/_uploads/SJGJ4tP2a.png) > 注意: 在 Python 中,所有「非0」的數字和「非空(None)」的字串、列表、元組等資料型態都被視為 True,只有 0、空字串、空列表、空元組等被視為 False。因此,在進行布林型態轉換時,需要注意資料型態的 True、False 性質。 總結 === :::success 註解(Comment):在 Python 中用「#」表示註解,「#」後面的任何字元、字串都不會被 Python 辨識成程式執行。 ::: :::success 變數(Variable):儲存資料型態的容器。 資料型態(Data Type):資料的類型,如有 int、float 等,可比如變數這個容器的形狀。 數值(Value):資料型態的值都可泛指為數值,可比如變數這個容器當中的水。 ::: 多重指定: ```python= a = b = c = 1 ``` or ```python= a, b, c = 1, 2, 3 ``` 資料型態: * Number(數字) -> 今日所學 * String(字串) -> 今日所學 * bool(布林) -> 今日所學 * List(列表) * Tuple(元組) * Set(集合) * Dictionary(字典) Number 可以分成 int, float, bool, complex(複數)。 1. Python 裡面只有一種整數型態,叫做 int。 2. Python 中,一個變數可以透過賦值指向不同型態的物件。舉例:a=1、a="string"、a=True、a=0.87,意思就是變數 a 可以自動轉變成不同型態,稱為隱式轉換。 3. 數值的除法包含兩個運算子:「/」傳回一個浮點數(單純除法而已),「//」傳回一個整數(就是整除)。 Python 中的字串用單引號 「**'**」 或雙引號 「**"**」 括起來,或同時使用反斜線 「\」 轉義特殊字元。 :::danger 單雙引號必須是成對!不成對會發生錯誤,如:「'ABCDEFG"」 ::: 字串就是一堆字元組成的,字串當中只有一個值而已就稱為字元,如:「A」。 而字串的擷取的語法格式如下: `變數[起始點:結束點:間隔]` 以下程式碼假設 A = "1234567" ```python= A = "1234567" print(A[0:3]) # 實際輸出:123 ``` 從起始點到結束點的擷取,只會擷取到 3-1 = 2 索引的位置而已,也就是 123。 1. 反斜線「\」可以用作跳脫字元,使用 r 可以讓反斜線不發生跳脫字元。 2. 字串可以用 + 運算子連接在一起,用 * 運算子複製。 3. Python 中的字串有兩種索引方式,由左至右以 0 開始,從右至左以 -1 開始。 4. Python 中的字串不能被改變。 布林型態 = true、false。 1. 布林型態只有兩個值:True 和 False。 2. 布林型態可以和其他資料型態進行比較,例如數字、字串等。在比較時,Python 會將 True 視為 1,False 視為 0。 3. 布林型態可以和邏輯運算子一起使用,如 and、or、not。這些運算子可以用來組合多個布林表達式,產生一個新的布林值。 4. 布林型態也可以轉換成其他資料型態,例如整數、浮點數和字串。在轉換時,True 會被轉換成 1,False 會被轉換成 0。 參考資料 === [給自學者的Python教學(4):變數篇ep1](https://chunyeung.medium.com/%E7%B5%A6%E8%87%AA%E5%AD%B8%E8%80%85%E7%9A%84python%E6%95%99%E5%AD%B8-4-%E8%AE%8A%E6%95%B8%E7%AF%87ep1-9ac8164aac75) [副檔名、後綴名是什麼?常見問題說明 | 天矽科技網頁設計](https://www.tsg.com.tw/blog-detail4-312-0-file-extension.htm) [Python資料型態,可變與不可變物件](https://changlt.blogspot.com/2017/04/python_29.html) [菜鳥教程 - Python3 基本數據類型](https://www.runoob.com/python3/python3-data-type.html)