0

对 Python 来说相对较新,但我还没有在 SO 上看到过这样的东西。

我正在用 Python 构建密码验证器,我已经创建了几个规则,例如长度、字母数字、大写等。我挂断的部分是我还需要一个特定的特殊字符集来检查. 我不确定我是否只是有语法问题,或者我没有构建代码检查部分,但无论我输入什么,它似乎总是将特殊字符标记为不在密码中,即使它们是。

我尝试如下调用特殊字符列表:

spec= "!@#$%&_="

完成工作的部分是对每个项目(如上所述)进行一系列验证检查,对于我正在尝试的特殊字符检查:

elif not any(s in spec for char in s):
            print ("Password must contain a special character of !@#$%&_=")

即使使用应该通过的有效密码,程序也会运行但会命中特殊字符打印语句。我相信我被 elif + any in 语句挂断了,并且语法已关闭。

注意:我想避免使用正则表达式,并使用指定的特殊字符列表。

先感谢您!

4

2 回答 2

1

修复你替换any(s in spec for char in s)any(char in spec for char in s).

要检查密码是否至少包含一个特殊字符,请执行以下操作:

special_character = "!@#$%&_="

def is_valid(pwd):
    global special_character
    return any(char in spec for char in pwd)    

def is_valid_other_method(pwd):
   global special_character
   return len(set(special_character).intersection(set(pwd))) > 0

print(is_valid('qwerty!'))
# True

print(is_valid('qwerty'))
# False

输出:

True
False
于 2017-06-25T14:09:19.333 回答
0

你走在正确的轨道上。但是,您需要实现最后一个功能。这是您需要的所有代码。

 word = "!@#$%&&^&*"

 def true(pwd))
     global character
     return any(char in spec for char in pwd) 

 def otherthingsthatstrue(pwd):
     global character
     return len(set(character).intersection(set(pwd))) > 0

 print(true('word!')

 print(otherthingsthatstrue('word'))
于 2017-06-25T14:31:36.407 回答