列表中的密码检查器

Password checker from list

我正在尝试构建一个函数来检查密码是否有效。它具有通常的约束,其中包括 - 必须包含大写字母、小写字母、数字和标点符号,我有代码。但是标点符号只能来自给定的列表。标点是!@#$%&()-_[]{};':",./<>?

def password_check(string):
    punct = ['!', '@', '#', '$', '.', '%', '&', '(', ')', '-', '_', '[', ']', '{', '}', ';', "'", ':', '"', ',', '.', '/', '<', '>', '?']
    val = True

    if len(string) < 8:
        val = False             

    if not any(char.isdigit() for char in string):   
        val = False

    if not any(char.islower() for char in string ):
        val = False

    if not any(char.isupper() for char in string):
        val = False

    if not any(char in whitelist for char in string):
        val = False

    if any(char == " " for char in string):
        val = False

    return val

你好世界1!应该 return True 而 HelloWorld1!* 应该 return False。如何确保非字母数字字符来自列表?

这应该有效

def password_check(string):
    whitelist = set("!@#$.%&()-_[]{};':\",./<>?aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ0123456789")

    if set(string) <= whitelist:
        #Password is valid
        val = True
    else:
        #Password isnt Valid
        val = False
    return val