Python 如何遍历字符串中的所有字符,然后检查是否有任何字符包含小写、大写、数字和标点符号,并返回True
我试图检查字符串是否包含任何小写、大写、数字或标点符号的字符,如果有,则返回True,但每当我运行它时,代码只检查第一个字符。我的迭代错误吗 我尝试创建条件,检查字符是否为小写、大写、数字或标点符号,然后返回true。否则返回false 这就是我目前的情况:Python 如何遍历字符串中的所有字符,然后检查是否有任何字符包含小写、大写、数字和标点符号,并返回True,python,Python,我试图检查字符串是否包含任何小写、大写、数字或标点符号的字符,如果有,则返回True,但每当我运行它时,代码只检查第一个字符。我的迭代错误吗 我尝试创建条件,检查字符是否为小写、大写、数字或标点符号,然后返回true。否则返回false 这就是我目前的情况: def check_characters(password, characters): '''Put your docstring here''' for i in password: if i.islowe
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,请查看我的答案。啊,谢谢!我没有意识到将角色组合成一组会让事情变得更容易,也不知道其他角色是不必要的。啊,谢谢!我没有意识到将角色组合成一组会让事情变得更容易,也不知道其他角色是不必要的。好吧,我想我理解这个问题。谢谢你的意见,特别是考虑到我对这个问题的糟糕解释。好的,我想我理解这个问题。谢谢你的意见,特别是考虑到我对这个问题解释得不好。