# 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可以得到以下資訊
- 
- 快速理解虛擬環境概念:虛擬環境每個皆為獨立個體,環境中可以安裝並管理套件,以滿足特定專案的需求。
- 套件(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`