Python 全攻略第 1 章 Python Data Types 課程筆記

Python 全攻略第 1 章 Python Data Types 課程筆記

前言

  • 這一章主要在學習 Python Data Types 的相關概念,目前你看到的只是我示範如何使用 ChatGpt 輔助產生這章節筆記的成果,後續還會有增新,請期待~

學習目標

  • 了解 Python 中常用的 7 種資料類型
  • 掌握如何宣告不同類型的變數
  • 熟悉不同資料類型的運算規則

內容大綱

  • 數值型別: 整數、浮點數
  • 字串(String)
  • 布林值(Boolean)
  • 列表(List)
  • 字典(Dictionary)
  • 集合(Set)
  • 元組(Tuple)
Class Name Type Description Copy By Reference
Integer int Whole numbers, such as -5, 0, 16 No
Float float Numbers with decimal point, such as 10.25, 0.04, 3.14159 No
String str Ordered sequence of characters, such “Aloha” No
Boolean bool Logical value indicating True or False No
List list Ordered sequence of data, such as [12, “Hello”, True] Yes
Dictionaries dict Unordered key-value pairs, such as {“name”: “Wilson”} Yes
Tuples tup Ordered immutable sequence of objects, such as (10, “100”, ”Hello”) Yes
Sets set Unordered collection of unique objects {“a”, “b”} Yes

以上圖表來自 Udemy Python 全攻略 Wilson 老師第一章的投影片資料

數值類型

Python 中的數值分為兩大類: 整數浮點數

  • 整數就是我們平常使用的整數,例如:
x = 10
y = -3
z = 0
  • 變數與賦值:

    • a = 2 的意義
      • 變數(Variable): 創建一個型別的實例(Class Instance) →
      • 等號(assignment)的意義 → 把右邊的參考(Value Reference) 賦值給左邊的變數
      • Python 是動態型別(Dynamic Typing),會依據右邊的賦執型別,來決定左邊變數的型別
      • 右邊數值的意義 → 記憶體儲存的參照位置
  • 浮點數就是帶有小數點的數字,例如:

a = 1.5
b = 3.14159
c = -0.01
  • 數值型別可以進行標準的算術運算,像是加法、減法、乘法和除法等。
print(10 + 3.5) # 13.5
print(16 - 10) # 6
print(2 * 5)   # 10  
print(10 / 2)  # 5.0
  • 除了基本的四則運算外,還有許多內建的 Python 運算函數可以提供進一步的數值運算,例如:

    • abs()
    • pow()
    • max()
    • min()
    • round()
  • 轉型 (Type Casting) 概念: 不同型別之間,可透過轉型來轉換,轉型的語法就是直接用型別加上小括號,就可以來進行轉型,例如:

    • str(123)、float(1/4)、int(“1.0”)、list((1, 2, 3, 4, 5))
    • 轉型失敗: 拋出 Value Error 例外,例如: int(“a”)
a = (1, 2)
print(type(a)) # <class 'tuple'>
a = list(a)
print(type(a)) # <class 'list'>
  • 補充: type() 函數是 Python Build-in 函數,可用來檢查當下物件的型別

  • 其他提供數學運算的模組(需 import math):

    • e (對數)
    • pi (圓周率)
    • floor()
    • ceil()
    • sqrt()

字串 (String)

  • Python中的字串需要用單引號 ' 或雙引號 " 包起來,例如:
str1 = 'Hello World' 
str2 = "Python String"
  • 字串是有序的字元序列 (起始序號為0),可進行索引 (Index)、分割 (slice) 和接合 (Join) 等操作,例如:
    • 比較: print(3 + 3) 和 print(“3” + “3”) → 字串的相加就是將多個字串接合 join 的概念
    • print(“abcde”[0]) → a;print(“abcde”[:-1]) → edcba
name = 'John'
print(name[0]) # J 

s = 'Hello'
s1 = 'World'
print(s + ' ' + s1) # Hello World
  • string 是 不變的 (Immutable): 如果物件被創造出來後,其 value 沒辦法被改變,稱之為 Immutable objects,常見的 Immutable objects 的型態,像是 int, float, string, tuple。
  • For string 的相關內建函數:
    • len()
    • upper()
    • lower()
    • issupper()
    • index()

布林值(Boolean)

  • 布林值只有 TrueFalse 兩種值,通常用來判斷邏輯條件。
x = True
y = False

print(x and y) # False 
print(x or y)  # True
  • 補充: Python 的註解,以上面範例為例,# 字元代表跟在 # 字元之後的同行註解文字,用來針對該行的程式碼作補充說明,以上述範例為例,註解帶出來的是左邊程式碼執行的結果
    • 單行註解 → 於要加入的單行這动文字前使用 # 來標示,如以下範例所示。
    • 如多行註解 → 於要加入的多行註解文字的上下行使用連續三個單引號字元做為前導與結束標示,如以下範例所示。
a = 2 # a 的賦值是 2
print(a)

def add(a: int, b: int):
  '''
  兩個整數的加法
  '''
  return a + b

print(add(2, 3))  

  • 注意: 在 python 中所有的物件都具備 True 的布林值 → 除了 None、0、False 以外!!!
  • 補充: None 和其他程式語言的 Null 類似功能,代表目前的物件沒有任何賦值參照的指定。
  • boolean class 是 integer 的 subclass。
    • print(issubclass(bool, int)) # True
    • True 和 False 其實是 boolean class 的 singleton instance,因此 True 與 False 亦會是 integer 的 instance
      • isinstance(True, bool) # True
      • isinstance(False, bool) # True
      • int(True) # 1
      • int(False) # 0
  • 關於 Python boolean 的更多細節可參考: Python bool

列表 (List)

  • 列表 (List) 是最常用的資料結構之一,是一群物件成員的有序序列,用方括號[]表示,裡面的元素型別可以不同。
  • list、tupple、dictionary 都可視為是物件的容器。
nums = [1, 2, 3]  
mix = [1, "Hello", True]
  • 列表是可變 (mutable) 序列 → list 的物件成員可變,所以可以進行索引、修改、排序等操作。
nums[0] = 5    # 修改第一個元素為5
nums.sort()    # 對列表進行排序

字典 (Dictionary)

  • 字典(Dictionaries)用大括號{}表示,裡面是鍵與值成對(key and value pair)成員的集合。
person = {"name": "Mary", "age": 25}  
print(person["name"]) # Mary
  • 鍵(key)用於查找對應的值(value),字典是無序的。
    • key 必須是 immutable & hashable object
  • build-in method: keys(), values(), items()

集合 (Set)

  • 集合 (Set) 與列表 (List) 類似,唯一的區別在於集合中的元素無序,而且元素不可重複。
s = {2, 4, 6}
s.add(8) # 添加元素
print(4 in s) # True
  • 我們通常利用集合進行交集、聯集等運算。
  • Build-in Functions:
    • difference() 差集
    • intersection()交集
    • isdisjoint()
    • issubset() 是否為子集, issuperset() 是否為父集
    • union() 聯集
      Python Sets Operation
      [Note]: 上圖參考自 Python Set

元組 (Tuple)

  • 元組 (Tuple) 用小括號()定義,裡面的元素型別可以不同。
point = (2, 4) 
mix = (3, "hello", False)
  • 元組是不可變 (Immutable) 序列,不能修改其中的元素 (這意味不能增減或者置換 Tuple 裡的成員)。
  • 元組的封裝 (Packing) 與解封裝 (unpacking)
    • Tuple Packing → 創建 Tuple - Create Tuple,例如: a = (8, 99, 90, 6.7)
    • Tuple Unpacking → Tuple 指派(創建) - Tuple assignment,例如: (n1, n2) = (99, 7),n1 對應 99,而 n2 對應 7
    • Unpacking Releation Exception → Value Error Exception,例如: (num1, num2, num3, num4, num5) = (88, 9.8, 6.8, 1)
      • 還記得 Tuple 是不可變的,因此左邊成員數必須和右邊賦值的成員數對等!!!
      • 改成 (num1, *num2, num3) = (88, 9.8, 6.8, 1) → num1 對應 88, num2 對應 (9.8, 6.8), num3 對應 1,其中 * 表示 args 表示這個參數是複數的參數(另外有 **args 是指 key-value pairs parameters)
  • 關於 Tuple 的 Packing & Unpacking 更多細節可參考 Tuple Assignment

結語

  • 以上介紹了Python中最常用的7種資料類型,希望大家在學習的過程中多加練習,熟能生巧!
  • 目前使用 ChatGpt 產生的內容大致如上,但往往其實受限於產生的篇幅限制,有時會無法完整產生所有的內容,後續的部分,就要技巧性地請 AI 分段產生,目前只是利用這個初稿展示一下成果,但實際的筆記,其實依據我個人習慣,我都會反覆的增刪及修改最後的內容,以符合自己的期待,也會陸續在每次看到一些值得追加的部分,再做增添,這也是線上筆記的優點所在,與大家共勉之~
4個讚

看到Chris大大精美的筆記實在好生佩服 QQ
努力的上課、理解感覺就跟得很用力了,複習的時候又想嘗試跟著老師的範例操作幾下,筆記很難這麼有組織… 正在煩惱怎麼分享我用.ipynb做的整理 >"<

1個讚

想請教 @ChrisWei 兄 或 @sky 大大,如果筆記是用VScode做的.ipynb檔案,是可以直接分享檔案嗎?還是要設法改寫成全markdown再放到論壇上分享給大家呢?… 對markdown也是一知半解不太熟悉,vscode跟Jupiter notebook算是用過多一點點…

印象中有轉換工具。

剛剛 google 了一下,排第一個的是這個:


如果忙碌的話,可以把 .ipynb 放在 github,然後在總表中放 github 連結即可。(google colab 可以直接開啟 github 的 .ipynb

祝順利,感謝你的努力!

1個讚

有個方法是上傳到google drive,在google drive可以用colab開啟ipynb檔。然後可以在colab裡可以像其他google文件一樣開啟共用讓其他人看到

1個讚

感謝二位!這兩個方法都不錯,我晚些趁工作空檔處理一下。

  • 每一種編輯器能支援的 markdown 語法,其實不盡相同,因此 vscode 上面支援的其實會和 discord 論壇上的略有差異,以我個人來說,剛開始整理,會先用 vscode 做完初稿,然後再貼到 Discord 上,遇到不能支援的,再想辦法調整就好了,此外其實 markdown 語法有些類似 HTML,因此像比方說 <br/> 這樣的空行符號,其實在 discord 上或者是 vscode 的 markdown 上都能接受,當你如果發現格式轉不過去的時候,不妨就可試試 HTML 語法看看。

  • 另外像表格之類的轉換,有時會覺得麻煩,這時就可 google 用 markdown table on-line convert 這樣的關鍵詞查一下,就能找到可以用剪貼簿,幫我們從 ppt、doc 等 office 文件剪貼,轉換為 markdown table 的線上工具,例如: TableConvert 這個網站,就很好用,甚至也有流程圖轉換成 markdown mermaid format 的線上轉換器,這些都可善加利用~

  • 寫 Markdwon 筆記,我也不是一開始就這麼順,也是慢慢寫過幾篇之後,漸漸就能本能地記住一些 MD 基本語法,而能夠較流暢地來專注於筆記的內容撰寫,至於整理筆記,不用自己太辛苦,可以自己擬個大綱,讓 ChatGpt 幫你生出初稿,初稿產生之後,再自己來增減內容及潤飾,這部分不妨可參考我前不久在論壇上分享的這篇心得筆記: 【不要害怕作筆記,自從有了 ChatGpt,你我都能變成一位共學筆記的厲害寫手】

2個讚

Sky 兄提到的 GitHub - jupyter/nbconvert: Jupyter Notebook Conversion 這個工具我試過,不是太好用,但其實 jupyter notebook 的 markdown block 部分已經和 discord 十分相似,我比較建議是直接貼過去,有跑版的再微調修改就好了,這樣改反而省力些~

1個讚