Python 如何遍历字符串中的所有字符,然后检查是否有任何字符包含小写、大写、数字和标点符号,并返回True

Python 如何遍历字符串中的所有字符,然后检查是否有任何字符包含小写、大写、数字和标点符号,并返回True,python,Python,我试图检查字符串是否包含任何小写、大写、数字或标点符号的字符,如果有,则返回True,但每当我运行它时,代码只检查第一个字符。我的迭代错误吗 我尝试创建条件,检查字符是否为小写、大写、数字或标点符号,然后返回true。否则返回false 这就是我目前的情况: def check_characters(password, characters): '''Put your docstring here''' for i in password: if i.islowe

我试图检查字符串是否包含任何小写、大写、数字或标点符号的字符,如果有,则返回True,但每当我运行它时,代码只检查第一个字符。我的迭代错误吗

我尝试创建条件,检查字符是否为小写、大写、数字或标点符号,然后返回true。否则返回false

这就是我目前的情况:

def check_characters(password, characters):
    '''Put your docstring here'''
    for i in password:
        if i.islower():
            return True
        if i.isupper():
            return True
        if i.isdigit():
            return True
        if i.punctuation():
            return True
        else:
            return False



def main():

    password = "n11+"
    print(check_characters(password, ascii_lowercase))
    print(check_characters(password, ascii_uppercase))
    print(check_characters(password, digits))
    print(check_characters(password, punctuation))

如果字符包含小写字母,我希望它返回True,对于其他函数调用也一样,但是实际输出都是True,当它只应该为第一次迭代后返回的小写字母、数字和标点符号为True时;另外,您没有使用
字符
参数

只有在
字符中遇到字符时,才希望返回true。如果未遇到任何此类字符,请返回false:

from string import *

def check_characters(password, characters):
    # convert to set for better performance
    characters = set(characters)
    for i in password:
        if i in characters:
            return True
    return False


def main():
    password = "n11+"
    print(check_characters(password, ascii_lowercase))
    print(check_characters(password, ascii_uppercase))
    print(check_characters(password, digits))
    print(check_characters(password, punctuation))
您可以使用
任意
功能简化此过程:

def check_characters(password, characters):
    # convert to set for better performance
    characters = set(characters)
    return any(i in characters for i in password)
import string
def check_characters(password, characters):
    '''Put your docstring here'''
    for i in password:
        if i.islower():
            return True
        if i.isupper():
            return True
        if i.isdigit():
            return True
        if i in string.punctuation:
            return True
无论如何,在这两种情况下,运行
main
将输出:

True
False
True
True

您将在第一次迭代之后返回;另外,您没有使用
字符
参数

只有在
字符中遇到字符时,才希望返回true。如果未遇到任何此类字符,请返回false:

from string import *

def check_characters(password, characters):
    # convert to set for better performance
    characters = set(characters)
    for i in password:
        if i in characters:
            return True
    return False


def main():
    password = "n11+"
    print(check_characters(password, ascii_lowercase))
    print(check_characters(password, ascii_uppercase))
    print(check_characters(password, digits))
    print(check_characters(password, punctuation))
您可以使用
任意
功能简化此过程:

def check_characters(password, characters):
    # convert to set for better performance
    characters = set(characters)
    return any(i in characters for i in password)
import string
def check_characters(password, characters):
    '''Put your docstring here'''
    for i in password:
        if i.islower():
            return True
        if i.isupper():
            return True
        if i.isdigit():
            return True
        if i in string.punctuation:
            return True
无论如何,在这两种情况下,运行
main
将输出:

True
False
True
True

好的,这里的问题是,在检查第一个字符后,您返回
。要执行您想要的操作,您应该
仅在满足任何条件时返回True

如果没有,则应转到下一个字符,并且只有当您已完成所有字符,但没有一个字符满足这些条件时,才应
返回

from string import punctuation

def check_characters(password):
    '''Put your docstring here'''
    for i in password:
        if any((i.isalpha(), i.isdigit(), i in punctuation)):
            return True
    return False
(我在编辑问题之前键入了这个,为了完整起见,我将它留在这里)

至少,你的问题是这样说的。然而,给定上下文(您似乎在检查密码的有效性),我认为您真正想要的是断言字符串中的所有字符都满足给定的约束。如果是这样,则需要反转条件:

def check_characters(password):
    '''Put your docstring here'''
    for i in password:
        if not all((i.isalpha(), i.isdigit(), i in punctuation)):
            return False
    return True

好的,这里的问题是,在检查第一个字符后,您返回
。要执行您想要的操作,您应该
仅在满足任何条件时返回True

如果没有,则应转到下一个字符,并且只有当您已完成所有字符,但没有一个字符满足这些条件时,才应
返回

from string import punctuation

def check_characters(password):
    '''Put your docstring here'''
    for i in password:
        if any((i.isalpha(), i.isdigit(), i in punctuation)):
            return True
    return False
(我在编辑问题之前键入了这个,为了完整起见,我将它留在这里)

至少,你的问题是这样说的。然而,给定上下文(您似乎在检查密码的有效性),我认为您真正想要的是断言字符串中的所有字符都满足给定的约束。如果是这样,则需要反转条件:

def check_characters(password):
    '''Put your docstring here'''
    for i in password:
        if not all((i.isalpha(), i.isdigit(), i in punctuation)):
            return False
    return True
使用此功能:

def check_characters(password, characters):
    # convert to set for better performance
    characters = set(characters)
    return any(i in characters for i in password)
import string
def check_characters(password, characters):
    '''Put your docstring here'''
    for i in password:
        if i.islower():
            return True
        if i.isupper():
            return True
        if i.isdigit():
            return True
        if i in string.punctuation:
            return True
您必须使用它,因为您执行了一个
else
,并且
返回
只输出一次,因此如果没有,它将不会返回并继续运行。

使用此功能:

def check_characters(password, characters):
    # convert to set for better performance
    characters = set(characters)
    return any(i in characters for i in password)
import string
def check_characters(password, characters):
    '''Put your docstring here'''
    for i in password:
        if i.islower():
            return True
        if i.isupper():
            return True
        if i.isdigit():
            return True
        if i in string.punctuation:
            return True

您必须使用它,因为您执行了一个
else
,并且
返回
只输出一次,因此如果没有,它将不会返回并继续运行。

您的问题有点不清楚。仅当字符串中的所有字符都是字母数字或标点符号,或者至少有一个是字母数字或标点符号时,才返回
True
?您的问题似乎建议使用后者,但前者更适合于此上下文。请去掉
else
,并将
return False
移动到
for
循环之后。现在的情况是,你总是在看了第一个字符后返回一些东西,不管是什么。啊,对不起,如果至少有一个字符是字母数字或标点符号,我希望它返回True。@csstudent,看看我的答案。你的问题有点不清楚。仅当字符串中的所有字符都是字母数字或标点符号,或者至少有一个是字母数字或标点符号时,才返回
True
?您的问题似乎建议使用后者,但前者更适合于此上下文。请去掉
else
,并将
return False
移动到
for
循环之后。现在的情况是,您总是在查看第一个字符后返回某些内容,不管是什么。啊,对不起,如果至少有一个字符是字母数字或标点符号,我希望返回True。@csstudent,请查看我的答案。啊,谢谢!我没有意识到将角色组合成一组会让事情变得更容易,也不知道其他角色是不必要的。啊,谢谢!我没有意识到将角色组合成一组会让事情变得更容易,也不知道其他角色是不必要的。好吧,我想我理解这个问题。谢谢你的意见,特别是考虑到我对这个问题的糟糕解释。好的,我想我理解这个问题。谢谢你的意见,特别是考虑到我对这个问题解释得不好。