Python 列表中的密码检查器

Python 列表中的密码检查器,python,passwords,Python,Passwords,我正在尝试构建一个函数来检查密码是否有效。它有通常的限制,包括-必须包含一个大写字母、小写字母、数字和标点符号,我有代码。但是标点符号只能来自给定的列表。标点符号是!@$%&()-_[]{};':“,./ def密码检查(字符串): 点=['!'、'@'、'#'、'$'、'、'、'、'、'、'、'('、')、'-'、'、'、'['、']'、'{'、'}'、';'、'、':'、'、'、'、'、'、'/'、'?'] val=真 如果长度(字符串)

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

def密码检查(字符串):
点=['!'、'@'、'#'、'$'、'、'、'、'、'、'、'('、')、'-'、'、'、'['、']'、'{'、'}'、';'、'、':'、'、'、'、'、'、'/'、'?']
val=真
如果长度(字符串)<8:
val=False
如果没有(char.isdigit()表示字符串中的字符):
val=False
如果没有(char.islower()表示字符串中的字符):
val=False
如果没有(char.isupper()表示字符串中的字符):
val=False
如果没有(字符串中字符的白名单中字符):
val=False
如果有(字符串中的字符为char==”):
val=False
返回值
你好,世界1!当HelloWorld1时应返回True!*应该返回False。如何确保非字母数字字符来自列表?

这应该可以工作

def密码检查(字符串):
白名单=集合(“!@$.%&()-\[]{};':\”,./?AABBCCDDEEFFGGHHIIJKKLMNNOOPQQRSTTUUVWXXYYZZ0123456789”)

如果设置(字符串),这里的问题是什么?问题是什么?请更具体地说“..for..in..”不是一个筛选操作。非空序列永远不会为false-y。因此,“not false-y”始终为true。尝试使用实际的for循环语句,其中的条件是:“for char in password:if(char..)”或者,请参阅此处了解如何正确使用列表理解作为过滤器,例如:invalid_chars=[c for c in password if is_invalid(c)];如果无效字符:…您创建值列表
True/False
,但
not
只检查列表是否为空,而不会检查是否存在
False
。如果不是全部,您需要
(您的列表):val=False
检查其中一个元素是否为
False
。或者即使没有
if/else
-
val=all(您的列表)
我已经有了该代码,该代码只检查密码中是否至少有一个字符。我想确保标点符号来自列表。例如,HelloWorld1!为True,但HelloWorld1*为False,因为*不在我的列表中。@MojoMike我的回答确保唯一允许的标点符号是来自l的标点符号ist。我刚刚再次运行它,然后
HelloWorld1!
返回True和
HelloWorld1*
返回False对不起,我是说HelloWorld1!返回True,但HelloWorld1!*应该是False,但返回True。@MojoMike我已经修复了我的答案,现在应该可以解决问题了
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