簡體   English   中英

編寫密碼有效性檢查 function

[英]Writing a password validity check function

我最近開始學習 Python 並在遇到以下情況時開始處理場景:

問:某網站要求用戶輸入用戶名和密碼進行注冊。 編寫一個程序來檢查用戶輸入的密碼的有效性。 以下是檢查密碼的標准: 1. [az] 之間至少 1 個字母 2. [0-9] 之間至少 1 個數字 1. [AZ] 之間至少 1 個字母 3. [$ 之間至少 1 個字符#@] 4. 交易密碼的最小長度:6 5. 交易密碼的最大長度:12 您的程序應該接受一系列以逗號分隔的密碼,並將根據上述標准檢查它們。 將打印符合條件的密碼,每個密碼用逗號分隔。 示例 如果輸入以下密碼作為程序的輸入: ABd1234@1,a F1#,2w3E ,2We3345 那么程序的 output 應為: ABd1234@1*

我解決問題的方法是以下代碼:

'''

def validity_check(pword):
return \
    (any(i.islower() for i in pword)) and \
    (any(i.isnumeric() for i in pword)) and \
    (any(i.isupper() for i in pword)) and \
    (any((i == "$" or i == "#" or i == "@") for i in pword)) and \
    (6 <= len(pword) < 13)

raw_input = input("Please enter a series of passwords to check, separated by a comma: ")
raw_list = raw_input.split(",")
valid_pwords = []
for i in raw_list:
    if validity_check(i) == True:
        valid_pwords.append(i)
print(",".join(valid_pwords))

'''

我的解決方案似乎有效,但我的問題是關於可讀性。 自從開始這些 Python 問題以來,我已經有點痴迷於盡可能少的代碼行。 程序可以更短嗎? 我選擇使用帶有三元運算符的單個 function,這會影響可讀性嗎?

另外,由於我是 Python 的新手,因此非常歡迎對該程序的任何幫助和批評!

你可以使用正則表達式來解決這個問題,我認為它會幫助你,

import re

pattern = r'^([^a-z]*|[^A-Z]*|[^0-9]*|[^#$@]*)$'

wordlist = list(map(str,input("Please enter a series of passwords to check, separated by a comma: ").split(',')))
for i in wordlist:
    if not(re.match(pattern,i)) and (5<len(i) and len(i)<13):
       print(i)

注意:此正則表達式模式匹配不屬於此類別的密碼,並且在 if 語句中,它對有效密碼返回 true。

謝謝 !

PEP 8對格式化您的validity_check檢查 function 有一些具體建議:

  • 更喜歡使用括號內的隱式續行而不是使用反斜杠的顯式續行
  • 將二元運算符放在連續行的開頭。

此外,由於您有一堆 Boolean 值and一起編輯,因此首先執行最便宜的值。 尤其是在這里,您想在 go 之前拒絕一個長度錯誤的密碼,以免重復多次以驗證其他條件。

最后,與多個相等性檢查相比,更喜歡包含檢查,並刪除多余的括號。

def validity_check(pword):

    return (6 <= len(pword) < 13
            and any(i.islower() for i in pword)
            and any(i.isnumeric() for i in pword)
            and any(i.isupper() for i in pword)
            and any(i in "$#@" for i in pword))

任何更短的內容都可能比描述它更能掩蓋你正在做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM