[英]I have to check if the string contains: alphanumeric, alphabetical , digits, lowercase and uppercase characters
[英]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.