# Python 問題集
紀錄python學習過程中,遇到的各種問題
2022/11/01 開始,中間有一段時間沒有更新,因為去嘗試練習Markdown以及Notion等軟體。
---
## List
#### 轉換`string`指定位置的數值並回傳
在工作上遇到需將訂單號碼(Fake),處理末兩碼的代碼與數字置換,為避免人工錯誤,所以我寫成`function`來輔助工作流程
* Example:
* Input: 20221031==JA==
* Output: 20221031==01==
```python=
def order_no_transform(order_number: str) -> str:
"""將偽編訂單號碼,轉換成真實訂單號碼,並輸出
args:
order_number (str): 輸入偽編訂單號碼
return:
order_number (str): 輸出轉換後的真實訂單號碼
"""
# 建立一個代碼對照表
code_dict = {"A":1, "B":2, "C":3, "D":4, "E":5, "F":6, "G":7, "H":8, "I":9, "J":0}
# try if 末兩碼是否都在code_dict
try:
if order_number[-2] in code_dict and order_number[-1] in code_dict:
# 設定a, b變數 (倒數末兩碼)
a, b = code_dict.get(order_number[-2]), code_dict.get(order_number[-1])
# 正確回傳前面的所有數值+末兩碼
return order_number[:len(order_number)-2] + str(a) + str(b)
else:
raise IndexError()
except:
return 'Error: order number輸入錯誤'
if __name__ == '__main__':
# 範例用input來取得需轉換的數值
order_number = input('Enter Order number: ')
print(order_no_transform())
```
---
## Other (通用)
### `if __name__ == '__main__':`
第一次聽到的時候,不太能理解,但經過幾次的練習測試後,簡單可以解釋成==在執行這個py檔時,會執行這一行以下的程式碼==
> 程式執行的起始點
※ 只有1個檔案或function數量很少的情況下,沒有感受到影響,但使用在一個專案上,且當`import`其他`module`時,可以避免在導入其他`py`檔時,直接執行裡面的程式碼
Example:
假設有一個`a01.py`檔,並在裡面建立一個function - `sum()`,執行後會直接輸出==8==
```python=
# a01.py
def sum(x,y):
return x**y
print(sum(2,3))
# output: 8
```
如果改成用`if __name__ == '__main__':`方式,結果如下:
```python=
def sum(x, y):
return x**y
# 刪除 print(sum(2,3)),並新增line5
if __name__ == '__main__':
print('test')
# output: test
```
把`print('test')`這個function改到if底下執行,結果只會輸出==test==
如果再新增`line5`,`print(sum(2, 3))`
```python=
def sum(x, y):
return x**y
if __name__ == '__main__':
print('test')
print(sum(2, 3)) # 新增
"""
output:
test
8
"""
```
結果就會出現`sum(2, 3)`的輸出,通常我會用於運行測試指定的功能(function),或是在檢查單一`py`檔時使用