【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」。

註解(Comment)
---

在 Python 中的註解寫成「#」,在以上的程式碼中,執行的時候不會執行「#」符號右邊的文字。當程式碼行數眾多時,註解能夠提醒我們哪一行程式碼是在幹嘛的。
除了「#」的註解以外,也有三個單引號或三個雙引號所組成的多行註解,請看以下圖片。

:::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 的值。
接下來以下會有一張圖片,請看:

你是否發現,Python 與以往的程式語言不同,在 Python 宣告變數時,不須事先宣告「變數型態」,也就是它的形狀,就能夠自動變換形狀(型態)。這有個專有名詞稱為「隱式轉換」,Python 會自動將一種資料型態轉換為另一種資料型態,不需要我們去干預。
### 多重指定
---
在 Python 中,我們要替多個變數指定重複的值,我們可以這樣做:

可以看到我替三個變數 a, b, c 皆指定數值 1,然後打印這三個變數的值,發現竟然真的全部都是 1。
在 python 中,若不想要一行一行輸入變數的值,我們可以這樣做:

可以看到我將變數並行在一起指定變數值,然後並打印出四個變數之值。
資料型態(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(複數)。

而在 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() 函數可以得知哪個變數或其他物件是屬於什麼資料型態的。
以下是一個範例:

可以看到我們使用 type() 這個函數,透過打印的方式知道這四個變數的資料型態。
另外再教給各位判斷資料型態的函數:isinstance()

可以看到我在函數的框框裡的左邊輸入變數a的名稱,右邊則是輸入int,意謂我想要請一個人(這個人叫做isinstance()),幫我判斷這個變數是不是整數型態,就這樣。
接下來,當我們指定一個值時,Number 這個物件同時會被創建。

比如說我們給 var1、var2 值為 10、20 好了。
我們可以使用關鍵字 del,來刪除一個或多個物件,語法如下:
`del var1[, var2[, var3]......,varN]]]`
以下是刪除一個或多個物件的範例:

***請注意!若將一個物件刪除後,你還繼續用 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)」,而一個一個字元串在一起、黏在一起就成了字串。
而字串的擷取的語法格式如下:
`變數[起始點:結束點:間隔]`
***注意:截取只會截取到結束點的前一個索引值,結束點的索引值不會截取。***
我們先從這樣開始:

可以發現擷取字串的格式並不是一定要填的,像是上面這張圖片,我只填了0,而這個0就是索引值。
接下來我們看一張圖片,能讓你充分了解索引值是什麼。

我們可以從以上的圖片知道,一個字元佔一個索引值,而這個索引我們可以理解成字元在字串中的位置。我們用排隊來說好了,我們把索引想像成是號碼牌,而這些字元(包括空格)都是站在隊伍上的人們,他們手中各持有一張號碼牌,也就是我們所稱的索引。而當我們下了一道指令:a[0],變數 a 是指隊伍,而在這個隊伍中,我們只要找拿著號碼牌0的人,而那個人便是「I」。
> 索引值以 0 為起始點,以 -1 為最右側開始,如圖片中的索引 12。
> 字串以「+」號連結,表示兩字串相互連接在一起。而對字串使用乘號「*」再加上數字n表示對該字串複製n次。
以文字敘述你可能會較片面理解,為了更熟悉字串的相關用法,我們來做以下範例:

輸出結果:

### 跳脫字元(Escape character)
---
在 Python 中想要使用轉義字元(或稱跳脫字元 -> Escape character),其實跟大部分程式語言是相同的,一樣使用「\」反斜線,再加上其他相關字母,像是「\n」表示換行的意思。如果我們不想讓反斜線發生轉義,可以在字串前面加上一個 r,表示原始字串:
:::info
跳脫字元,就把它想像成是有特殊功用的字元。像「\n」不就是有別於一般字元的功用嗎?
:::

> 注意: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。

> 注意: 在 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)