Try   HackMD

Python 問題集

紀錄python學習過程中,遇到的各種問題
2022/11/01 開始,中間有一段時間沒有更新,因為去嘗試練習Markdown以及Notion等軟體。


List

轉換string指定位置的數值並回傳

在工作上遇到需將訂單號碼(Fake),處理末兩碼的代碼與數字置換,為避免人工錯誤,所以我寫成function來輔助工作流程

  • Example:
    • Input: 20221031JA
    • Output: 2022103101
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

# a01.py def sum(x,y): return x**y print(sum(2,3)) # output: 8

如果改成用if __name__ == '__main__':方式,結果如下:

def sum(x, y): return x**y # 刪除 print(sum(2,3)),並新增line5 if __name__ == '__main__': print('test') # output: test

print('test')這個function改到if底下執行,結果只會輸出test

如果再新增line5print(sum(2, 3))

def sum(x, y): return x**y if __name__ == '__main__': print('test') print(sum(2, 3)) # 新增 """ output: test 8 """

結果就會出現sum(2, 3)的輸出,通常我會用於運行測試指定的功能(function),或是在檢查單一py檔時使用