---
# System prepended metadata

title: AIGC X Python 會員零售資料AI分析實戰4/21 (Python Basic Syntax)
tags: [Python]

---

# 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` 
