# 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`檔時使用