【问题标题】:Need some hints and optimization tips需要一些提示和优化技巧
【发布时间】:2021-05-18 08:47:00
【问题描述】:

编写一个名为 password_check 的函数。 password_check 应该将单个字符串作为输入。它应该返回一个布尔值:如果密码是根据以下规则的有效密码,则为 True,否则为 False。如果字符串满足以下所有条件,则该字符串是有效密码:

  • 长度必须至少为 8 个字符。
  • 它必须至少包含以下每个类别中的一个字符:大写字母、小写字母、数字和标点符号。对于标点符号,可接受以下标点符号:!@#$%&()-_[]{};':",./?
  • 不得包含任何不属于上述四个类别的字符。这包括上述项目符号中未列出的任何标点符号、空格和任何其他字符。

解决这个问题的方法之一:

def password_check(as_string):
    uppercase = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
    lowercase = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
    punctuation = ["!","@","#","$","%","&","(",")","-","_","[","]","{","}",";","'",":",",",".","/","<",">","?"]
    number = ["1","2","3","4","5","6","7","8","9", "0"]
    cup = 0
    low = 0
    num = 0
    punc = 0
    for i in as_string:
        if i in uppercase:
            cup+=1
        elif i in lowercase:
            low+=1
        elif i in number:
            num+=1
        elif i in punctuation:
            punc+=1
    return (cup>=1) and (low>=1) and (num>=1) and (punc>=1) and len(as_string)>=8
print(password_check("tHIs1sag00d.p4ssw0rd."))
print(password_check("3@t7ENZ((T"))
print(password_check("2.shOrt"))
print(password_check("all.l0wer.case"))
print(password_check("inv4l1d CH4R4CTERS~"))

是否有任何优化提示,可能不需要创建列表...? 谢谢。

【问题讨论】:

  • 正则表达式。
  • 欢迎来到Stack Overflow。由于您似乎有工作代码并且正在寻找一般改进,这似乎更适合CodeReview - 不过请务必先检查他们的question guide

标签: python-3.x optimization


【解决方案1】:

您可以使用正则表达式来做到这一点

import re
def password_check(Str):
    #Regex Match
    #Check Both Case Alphabets,Numbers And Special Cases U Mentioned
    #{8,} Indicates At Least 8
    #Full Match Matches Entire Pattern
    #Few Symbols Has special meaning in regex to bypass that we add "\" before it 
    if re.fullmatch(r'[A-Za-z0-9!@#$%,-^&+_\':=\;.<?>\\{\}\)\(\[\]]{8,}', Str):
        return True
    else:
        return False
        
print(password_check("tHIs1sag00d.p4ssw0rd."))
print(password_check("3@t7ENZ((T"))
print(password_check("2.shOrt"))
print(password_check("all.l0wer.case"))
print(password_check("inv4l1d CH4R4CTERS~"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2013-07-31
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多