以下是用Grok AI生成。
以「水井三寶」(烏龜、白馬、姻緣花)為主題,設計一個 Python 小範例,展示如何使用隨機密碼生成器來產生與水井三寶相關的密碼。這個範例會結合物件導向程式設計(OOP)和 Python 的 random 模組,生成帶有三寶特色的密碼(例如包含「烏龜」、「白馬」、「姻緣花」的主題詞,並混雜隨機字元)。我們會使用封裝來管理密碼生成邏輯,並透過繼承讓每個寶物有獨特的密碼風格。
情境設定
假設我們要為水井三寶的每種寶物生成專屬密碼:
- 烏龜:密碼強調「長壽」,包含數字(年份)並較長。
- 白馬:密碼強調「迅捷」,包含特殊字元(象徵速度)並中等長度。
- 姻緣花:密碼強調「浪漫」,包含字母和愛心符號,較短但優雅。
每個密碼會結合寶物名稱、隨機字元(字母、數字、特殊符號),並確保安全性和隨機性。
範例程式碼
以下是一個完整的 Python 程式,展示如何用 OOP 和隨機模組生成水井三寶主題的密碼。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | import random import string class Treasure: """基類:定義水井三寶密碼生成器的共同行為""" def __init__(self, name): self.name = name self._charset = string.ascii_letters + string.digits + string.punctuation # 基本字元集 def generate_password(self, length=8): """生成隨機密碼,包含寶物名稱""" random_part = ''.join(random.choice(self._charset) for _ in range(length - len(self.name))) password = self.name + random_part # 打亂密碼字元 password = ''.join(random.sample(password, len(password))) return password class Turtle(Treasure): """烏龜:生成長壽主題的長密碼,強調數字""" def __init__(self): super().__init__("烏龜") self._charset = string.digits # 烏龜密碼以數字為主 def generate_password(self, length=12): """覆寫:生成12位密碼,包含至少4個數字""" random_part = ''.join(random.choice(self._charset) for _ in range(4)) # 4個數字 extra_part = ''.join(random.choice(string.ascii_letters) for _ in range(length - 4 - len(self.name))) password = self.name + random_part + extra_part return ''.join(random.sample(password, len(password))) class WhiteHorse(Treasure): """白馬:生成迅捷主題的密碼,包含特殊字元""" def __init__(self): super().__init__("白馬") self._charset = string.punctuation # 白馬密碼以特殊字元為主 def generate_password(self, length=10): """覆寫:生成10位密碼,包含至少3個特殊字元""" random_part = ''.join(random.choice(self._charset) for _ in range(3)) # 3個特殊字元 extra_part = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length - 3 - len(self.name))) password = self.name + random_part + extra_part return ''.join(random.sample(password, len(password))) class MarriageFlower(Treasure): """姻緣花:生成浪漫主題的短密碼,包含愛心符號""" def __init__(self): super().__init__("姻緣花") self._charset = string.ascii_letters + "♥" # 包含愛心符號 def generate_password(self, length=8): """覆寫:生成8位密碼,包含至少1個愛心符號""" random_part = random.choice("♥") # 至少1個愛心 extra_part = ''.join(random.choice(string.ascii_letters) for _ in range(length - 1 - len(self.name))) password = self.name + random_part + extra_part return ''.join(random.sample(password, len(password))) # 測試範例 if __name__ == "__main__": # 創建水井三寶實例 turtle = Turtle() horse = WhiteHorse() flower = MarriageFlower() # 生成並展示密碼 treasures = [turtle, horse, flower] for treasure in treasures: print(f"{treasure.name} 的密碼:{treasure.generate_password()}") |
執行結果:
程式碼解析
- 正規表示式相關性:
- 雖然本題聚焦密碼生成,但可以延伸到正規表示式。例如,生成的密碼可透過 regex 驗證是否包含特定字元(例如 \d+ 檢查數字、[!@#$%^&*] 檢查特殊字元)。
- 範例中未直接使用 regex,但可添加驗證(見下方擴展建議)。
- OOP 技術應用:
- 繼承:Turtle、WhiteHorse 和 MarriageFlower 繼承 Treasure,共享基本密碼生成邏輯。
- 多型:每個子類別覆寫 generate_password,生成符合自身主題的密碼。
- 封裝:_charset 是保護屬性,控制可用的字元集。
- 類與實例屬性:name 是實例屬性,確保每個寶物有獨特名稱;_charset 在子類別中自訂。
- 隨機密碼生成:
- 使用 random.choice 從字元集中選取字元。
- 使用 random.sample 打亂密碼字元,增加隨機性。
- 每個寶物有不同長度和字元偏好:
- 烏龜:12位,強調數字。
- 白馬:10位,包含特殊字元。
- 姻緣花:8位,包含愛心符號 ♥。
- 安全考量:
- 密碼包含寶物名稱和隨機字元,並透過 random.sample 打亂,避免可預測性。
- 真實應用中應使用 secrets 模組(更安全),但為簡單起見這裡用 random。