【Python自學】簡易密碼合法性檢視程式
📘 Python 簡易程式碼:檢視密碼合法性
很多平台在註冊帳號時,都會要求使用者設定符合規則的密碼,例如長度要夠、要有英文大小寫、要包含數字,甚至不能包含特殊符號。
這次我們就用 Python 寫一個簡單的密碼合法性檢查程式,來練習條件判斷與字串方法。
🎯 練習目的
這個小程式主要用來複習以下幾個 Python 基礎觀念:
- if / elif / else 條件判斷:依照不同情況輸出不同提示。
- 邏輯運算子:使用 not 判斷條件是否不成立。
- 字串方法:使用 isalnum()、isupper()、islower()、isdigit()。
- 內建函式:使用 len() 和 any()。
📏 密碼檢查規則
這次設定的密碼規則如下:
- 規則 1:密碼長度需大於 8 個字元。
- 規則 2:密碼需包含英文大寫、小寫與數字。
- 規則 3:密碼不可包含符號,只能使用英文字母與數字。
🧪 完整程式碼
以下是簡易密碼合法性檢查程式。
🔎 程式邏輯說明
這支程式使用 if / elif / else 由上往下檢查密碼是否合法。
1. 檢查密碼長度
len(password) 會計算密碼字串的長度。
因為規則是「需大於 8 個字元」,所以如果長度小於或等於 8,就代表不符合規則。
2. 檢查是否包含符號
password.isalnum() 會判斷字串是否只包含「英文或數字」。
- 如果密碼只包含英文字母與數字,結果會是 True。
- 如果密碼包含符號,例如 !、@、_,結果會是 False。
這裡使用 not,代表「如果不是英數組合」,就印出錯誤訊息。
3. 檢查是否包含大寫字母
這段程式會逐一檢查密碼中的每個字元,只要有任何一個字元是大寫字母,就會通過這個條件。
如果完全沒有大寫字母,any() 的結果會是 False,再經過 not 反轉成 True,因此印出錯誤訊息。
4. 檢查是否包含小寫字母
islower() 會判斷字元是否為小寫英文字母。
如果密碼中完全沒有小寫字母,就會印出「密碼需包含至少一個小寫字母」。
5. 檢查是否包含數字
isdigit() 會判斷字元是否為數字。
如果密碼中沒有任何數字,就會印出「密碼需包含至少一個數字」。
6. 全部通過就輸出合法
如果前面的所有錯誤條件都沒有成立,就代表密碼符合所有規則,因此進入 else。
🧰 字串函式重點整理
這支程式使用了幾個很常見的 Python 字串方法與內建函式。
| 函式 / 方法 | 用途 | 範例說明 |
|---|---|---|
| len(password) | 計算字串長度。 | 判斷密碼是否大於 8 個字元。 |
| password.isalnum() | 判斷是否只包含英文與數字。 | 用來排除符號。 |
| any() | 檢查一組條件中是否至少有一個為 True。 | 判斷密碼中是否至少有一個符合條件的字元。 |
| isupper() | 判斷字元是否為大寫字母。 | 檢查是否包含大寫英文。 |
| islower() | 判斷字元是否為小寫字母。 | 檢查是否包含小寫英文。 |
| isdigit() | 判斷字元是否為數字。 | 檢查是否包含數字。 |
🧪 範例測試
下面整理幾組測試資料,看看不同密碼會得到什麼結果。
| 輸入密碼 | 判斷結果 | 原因 |
|---|---|---|
| abc | 不合法 | 長度不足。 |
| abcdefghi | 不合法 | 缺少大寫字母與數字。 |
| Abcdefghi | 不合法 | 缺少數字。 |
| Abcd12345 | 合法 ✅ | 長度足夠,且包含大寫、小寫與數字。 |
| Abcd123!! | 不合法 | 包含符號。 |
🧠 補充:any(c.isupper() for c in password) 怎麼理解?
程式中比較不直覺的部分,可能是這一段:
這段看起來有點長,但拆開來看其實很好理解。
1. for c in password
for c in password 的意思是:把密碼字串逐字拿出來檢查。
例如密碼是:
那麼變數 c 會依序變成:
2. c.isupper()
c.isupper() 會檢查目前這個字元是不是大寫字母。
| 字元 | c.isupper() |
|---|---|
| 'A' | True |
| 'b' | False |
| '1' | False |
3. any(...)
any() 會檢查一串結果裡面,有沒有至少一個是 True。
例如:
結果會是:
因為裡面至少有一個 True。
4. 加上 not 之後
原本這段:
意思是:
但我們想檢查的是「沒有大寫字母」時要顯示錯誤,所以前面加上 not。
意思就變成:
🔁 補充:如果想一次列出所有錯誤
原本的寫法是遇到第一個錯誤就停止判斷。如果想讓程式一次列出所有不符合的規則,可以改用清單收集錯誤訊息。
這個版本會把所有錯誤都收集到 errors 清單中,最後一次印出。
✅ 小結
這個密碼檢查程式雖然不長,但包含了很多 Python 初學者很常用到的基礎觀念。
- len():檢查密碼長度。
- isalnum():判斷字串是否只包含英文與數字。
- any():判斷一組條件中是否至少有一個成立。
- isupper():檢查是否有大寫字母。
- islower():檢查是否有小寫字母。
- isdigit():檢查是否有數字。
- not:反轉布林值,用來檢查條件「不成立」的情況。
- if / elif / else:依序檢查不同規則,並輸出對應結果。
密碼驗證的核心,就是把每一條規則轉成條件判斷,再逐一檢查。
留言
張貼留言