# AIGC X Python 會員零售資料AI分析實戰4/21 (Python Basic Syntax) [TOC] ## **Recall** AIGC X Python 會員零售資料AI分析實戰 - 安裝Python3 - footnote: Python程式語言開發至今,持續推出更新版本的Python,每種不同版本的Python皆代表著開分發者針對錯誤、程式等議題進行修改,因此官方網站上才有陳列出不同版本的Python - 安裝IDE(vscode) - 下載管理延伸套件(extension) - 虛擬環境、套件安裝 - footnote:為何課程需要用到虛擬環境?詢問ChatGPT可以得到以下資訊 - ![CleanShot 2024-04-22 at 09.57.58@2x](https://hackmd.io/_uploads/rkcrVr7WC.png =75%x) - 快速理解虛擬環境概念:虛擬環境每個皆為獨立個體,環境中可以安裝並管理套件,以滿足特定專案的需求。 - 套件(Packages):又可以稱之為模組 (Module),Python這種程式語言驚人之處,允許使用者安裝第三方的套件、網路上面可見的套件。課程中幫學員安裝的套件即是此種,這些套件非Python中原有,為其他開發者攥寫成,多數是方便使用者不需要寫冗長的語法,透過套件的使用即可達成目標! - Python Synatx 程式語法練習 ---- 當初學者開始學習 Python 時,遇到個種錯誤是非常常見學習過程。了解這些錯誤及其常見原因可以幫助學習者更快地掌握 Python 編程。以下是一些常見的 Python 語法錯誤,幫助各位學員學習! <aside> 💡 ChatGPT可以詢問以下關鍵字 **請幫我陳列出種常見的 syntax error ,並且給我例子與解說錯誤** </aside> ## 常見的 Syntax Error 與例子 1. **SyntaxError: invalid syntax** - **原因**: 代碼中有語法錯誤,可能是括號、引號、冒號等沒有正確使用,此種錯誤為新手期最常見錯誤,常見為打入指令python不存在的語法,導致錯誤的發生。 - **修正前**: ```python print "Hello, World" ``` - **修正後**: ```python print("Hello, World") # 加上括號 ``` - **原因**: 字串沒有被正確閉合。 - **修正前**: ```python print('Hello) ``` - **修正後**: ```python print('Hello') # 正確閉合字串 ``` 2. **IndentationError: expected an indented block** - **原因**: Python 使用縮排來定義代碼塊,若有缺少必要的縮排則會引發此錯誤,Python針對function(函式)class(類別)for loop(迴圈)等等,必要使用縮排`tab`才可以順利執行程式。 - **修正前**: ```python def foo(): print("Hello, World") ``` - **修正後**: ```python def foo(): print("Hello, World") # 正確縮排 ``` - **原因**: 代碼塊如函數或條件語句沒有被正確關閉。 - **修正前**: ```python if True: print("Hello") ``` - **修正後**: ```python if True: print("Hello") # 正確縮排和閉合 ``` 3. **NameError: name 'x' is not defined** - **原因**: 參照了一個未被定義的變數,執行程式碼時讀取為目前的檔案由上至下,如果過上方有變數程式碼未執行,將會導致錯誤發生,另外常見為typo打上下打的變數名稱不相同,導致程式運行時無法執行。 - **修正前**: ```python print(x) ``` - **修正後**: ```python x = 5 print(x) ``` 4. **TypeError: unsupported operand type(s)** - **原因**: 對不兼容的類型進行操作,例如將字串和數字進行相加,Python語法針對變數型態有:float(浮點數), int(整數), str(字串)等等。如同excel中的:時間、金錢等資料型態,錯誤的資料型態將無法進行運算,**參考Part2資料型態說明。** - **修正前**: ```python '2' + 2 ``` - **修正後**: ```python '2' + str(2) # 將數字轉為字串(可以回顧課程中範例!) ``` 5. **ValueError: invalid literal for int() with base 10** - **原因**: 嘗試將一個無法轉換為整數的字串轉為整數,通常在嘗試將一個值強制轉換成不支持的類型時引發,也為新手期常見錯誤。 - **修正前**: ```python int('hello') ``` - **修正後**: ```python int('123') # 使用可以轉換的字串 ``` - **錯誤發生**: ```python float('3.14159pi') # 字串包含非數字字符 ``` - **修正方式**: ```python float('3.14159') # 確保字串只包含數字和點 ``` 6. **AttributeError: 'module' object has no attribute 'X'** - **原因**: 嘗試訪問模組中不存在的屬性,這種錯誤可以常見於外部套件匯入後,想使用套件中的語法但使用錯誤,課程中幫各位學員於`pip install -r requiremne.txt`裡面包含多種套件,例如要使用Numpy套件,採用`Numpy.method`呼叫不屬於套件東西 。 - **修正前**: ```python import math print(math.PI) # PI 不存在於 math 模塊 ``` - **修正後**: ```python import math print(math.pi) # 使用存在的屬性 pi ``` - 想要了解套件功能可以採用以下語法快速查詢 ```python import numpy help(numpy) numpy.__dir__() # 列出套件所有可用方法 ``` 7. **KeyError: 'key'** - **原因**: 在字典中訪問不存在的鍵。 - **修正前**: ```python d = {'a': 1} print(d['b']) # 'b' 鍵不存在 ``` - **修正後**: ```python d = {'a': 1, 'b': 2} print(d['b']) # 確保鍵存在 ``` 8. **IndexError: list index out of range** - **原因**: 試圖訪問列表中不存在的索引,Python存放資料常見用index進行針對輸入的資料近進行編號,特別注意Python記錄編號都是從`0`號開始往下計算!,如`lst`的index為`0-2`。 - **修正前**: ```python lst = [1, 2, 3] print(lst[3]) # 索引 3 超出範圍 ``` - **修正後**: ```python lst = [1, 2, 3] print(lst[2]) # 使用有效的索引 ``` --- ## Python 基本資料型態和範例 <aside> 💡 ChatGPT可以詢問以下關鍵字 **請幫我陳列出Python中資料型態** </aside> 課程中無特別提到`bool`型態,有興趣學員可以再進一步查詢,理解資料型態有助於學習。想知道目前眼前的變數、資料是什麼型態?不妨使用`type()` 來查看資料的型態! | 資料型態 | 描述 | 範例 | |----------|------------------------------------------|------------------------| | `str` | 字符串,用於表示文字。 | `"Hello, World"` | | `bool` | 布林值,代表真 (`True`) 或假 (`False`)。 | `True`, `False` | | `int` | 整數型,代表沒有小數的數字。 | `42` | | `float` | 浮點型,代表有小數的數字。 | `3.14159` | --- - **str (字串)**: 文字的集合。 ```python hello = "Hello, World" ``` - **bool (布林值)**: 表示真 (`True`) 或假 (`False`)。 ```python is_student = True ``` - **int (整數)**: 不帶小數點的數字。 ```python age = 21 ``` - **float (浮點數)**: 帶小數點的數字。 ```python height = 1.75 ``` --- ## 資料結構和使用方法 <aside> 💡 ChatGPT可以詢問以下關鍵字 **請幫告訴我python中資料結構型態,list、dictionary** </aside> | 資料結構 | 描述 | 範例 | |----------|----------------------------------------------|--------------------------------------| | `list` | 可變的序列,可以包含多個元素,元素可以是不同的資料型態。 | `[1, 'apple', 3.14]` | | `dict` | 字典型,由鍵值對組成的集合,鍵必須是唯一的。 | `{'name': 'John', 'age': 30}` | | `tuple` | 不可變的序列,類似於 list,但一旦創建後不能更改。 | `(1, 'banana', 2.5)` | | `array` | 數組,類似於 list,但所有元素必須是同一資料型態。僅限數值型。 | `array('i', [1, 2, 3, 4])` | - **list (列表)**: 用於存儲一系列可變的元素集合,可以存放各種類型的資料,包括數字、字串、其他列表、字典、元組、布林值、對象等,可以存放多種不同型態資料變成一列。 ```python numbers = [1, 2, 3, 4, 5] numbers.append(6) # 添加元素 print(numbers) # 輸出: [1, 2, 3, 4, 5, 6] ``` ```python # 整數 integers = [1, 2, 3, 4, 5] # 字串 strings = ["hello", "world"] # 混合類型 mixed = [1, "hello", 3.14, True, None] # 嵌套列表 nested_list = [1, 2, [3, 4, 5], ["six", "seven"]] # 字典和元組 complex_list = [{"key": "value"}, (1, 2, 3), [4, 5, 6]] # 打印列表內容 print("Integers:", integers) print("Strings:", strings) print("Mixed types:", mixed) print("Nested list:", nested_list) print("Complex data structures:", complex_list) ``` - **dictionary (字典)**: 以鍵(key)值(value)對方式存儲數據,鍵唯一(每個都是獨一的!),其中字典的鍵(keys)必須是不可變的類型,如整數、浮點數、字串或數組(數組中的元素也必須是不可變的)。值(values)則可以是任何類型的數據,包括數字、字串、列表、另一個字典、自定義對象等 。 - 1. **基本類型的值**: ```python student = {'name': 'John', 'age': 25} print(student['name']) # 輸出: John student['grade'] = 'A' # 添加新鍵值對 ``` - 2. **列表和數組作為值**: ```python # 字典中的值包括列表和元組 my_dict = { 'numbers': [1, 2, 3, 4], 'dimensions': (1920, 1080) } ``` - 3. **字典嵌套**: ```python # 字典中的值包括另一個字典 my_dict = { 'person': {'name': 'Alice', 'age': 25}, 'scores': {'math': 95, 'english': 88} } ``` - 4. **混合類型的值**: ```python # 字典中存儲各種類型的數據 my_dict = { 'name': 'Bob', 'age': 30, 'is_student': False, 'skills': ['Python', 'JavaScript'], 'address': {'street': '123 Main St', 'city': 'Anytown'} } ``` - 5. **函數和對象作為值**: ```python # 使用函數和自定義對象作為字典的值 def my_func(): return "Hello, world!" class MyClass: def greet(self): return "Hello, class!" my_dict = { 'function': my_func, 'class_instance': MyClass() } ``` - 延伸)**tuple (數組)**: 類似於列表,但是不可變。 - **不可變性:數組一旦創建,其內容不能修改。這意味著你不能增加、刪除或修改數組中的元素。這種不可變性提供了一種程度的安全性,因為它保證了數組一旦被創建就不能被更改。** ```python dimensions = (1920, 1080) ``` --- ## 邏輯和數學運算符 - **邏輯運算符**: `and`, `or`, `not` ```python true_value = True false_value = False print(true_value and false_value) # False ``` 部分的運算符號較為特殊,需要使用時可以再做查詢! | 運算符 | 描述 | 範例 | 結果 | |--------|--------------------|------------------|------------| | `+` | 加法 | `5 + 3` | `8` | | `-` | 減法 | `5 - 3` | `2` | | `*` | 乘法 | `5 * 3` | `15` | | `/` | 除法 | `5 / 2` | `2.5` | | `%` | 取餘數(模除) | `5 % 3` | `2` | | `**` | 指數(冪運算) | `5 ** 3` | `125` | - **數學運算符**: `+`, `-`, `*`, `/`, `%`, `**` ```python print(5 + 3) # 8 print(10 % 3) # 1 print(2 ** 3) # 8 ``` ## 控制結構範例 - **if 條件語句**: ```python age = 20 if age >= 18: print("Adult") else: print("Not adult") ``` - **for 迴圈**:- `for variable in sequence`: - 學習時針對迴圈會產生何種結果感到疑惑,可使用文章尾端的提詞詢問ChatGPT ```python #range(arg) for i in range(5): print(i) 輸出: 0 1 2 3 4 ``` ```python fruits = ["apple", "banana", "cherry"] for fruit in fruits: print("I like", fruit) 輸出: I like apple I like banana I like cherry ``` ```python for char in "hello": print(char) 輸出: h e l l o ``` - **while 迴圈**: ```python count = 0 while count < 5: print(count) count += 1 ``` --- ## ChatGPT 回答Range() <aside> 💡 ChatGPT可以詢問以下關鍵字 **請幫我列出range(arg)需要填入何種參數,並且給我例子** </aside> - footnote : arg 代表 arguments常見名稱為參數,Python語法中使用方法種有() 小括號出現通常是代表有參數須填入,未填入參數會如何?答案是有時系統會默認採用開發者一開始設定的參數,但也可能出現錯誤訊息,如缺少參數的填入! ### `range()` 函數的參數: 1. **單個參數** (`stop`): - **說明**: 只提供一個參數時,這個參數定義了序列的結束邊界,即不包括這個值的上限。序列將從 0 開始,默認步長為 1。 - **範例**: ```python range(5) # 生成從 0 到 4 的整數 ``` 2. **兩個參數** (`start`, `stop`): - **說明**: 當提供兩個參數時,第一個參數定義了序列的開始,第二個參數定義了序列的結束邊界(不包括此值),默認步長為 1。 - **範例**: ```python range(2, 5) # 生成從 2 到 4 的整數 ``` 3. **三個參數** (`start`, `stop`, `step`): - **說明**: 提供三個參數時,可以定義序列的開始、結束和步長。步長可以是正數或負數,但不能為零。 - **範例**: ```python range(2, 10, 2) # 生成從 2 到 8 的偶數 (步長為 2) range(10, 2, -2) # 生成從 10 到 4 的遞減序列 (步長為 -2) ``` ### 使用注意事項: - **不包括結束值**: 在所有情況下,生成的序列都不包括 `stop` 值本身。 - **步長不為零**: `step` 參數不能為零,否則會引發 `ValueError`。 - **生成空序列**: 如果 `start` 和 `stop` 值相同,或者序列遞增時 `start` 大於 `stop`(遞減時反之),則會生成空序列。 ### `range()` 的常見用途: - **迴圈控制**: ```python for i in range(5): print(i) # 輸出 0, 1, 2, 3, 4 ``` - **生成列表**: ```python numbers = list(range(5)) print(numbers) # 輸出 [0, 1, 2, 3, 4] ``` `range()` 是一個非常實用的函數,尤其在需要重複執行某些操作或生成數字序列時非常方便。通過調整參數,你可以靈活地控制序列的生成方式。 ###### tags: `Python`