繁体   English   中英

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

[英]How to iterate through all characters in string then check if any characters contain lowercase, uppercase, digits, and punctuation and return True

我正在尝试检查字符串是否包含小写,大写,数字或标点符号,然后如果有则返回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。

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

您只希望如果遇到一个字符返回true characters 如果您没有遇到任何此类字符,则返回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))

您可以使用any功能简化此操作:

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

无论如何,在两种情况下,运行main都会输出:

True
False
True
True

好吧,这里的问题是您在检查了第一个字符后return了。 要执行您想要的操作, 只有在满足任何条件时, return True

如果都不是,那么您应该转到下一个字符,并且仅当您遍历所有字符但没有一个满足这些条件时 ,才应该return

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

使用此功能:

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 ,并且只return一次输出,因此,如果没有,它将不会返回并继续运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM