我花了几个小时来解决这个问题,但程序没有工作(语法错误)。 为类似问题寻找答案并没有帮助。以下代码有什么问题? 如果列表(密码)包含至少一个数字,并且其中包含一个大写字母和一个小写字母,我想要chek。 请给我最简单的方法,我是初学者......
def checkio(password):
array = list(password)
#for letter in array:
if len(array) < 10 or len(array) > 64:
return False
if (any(l.isdigit() for l in array) and (any(l.isupper( for l in array) and (any(l.islower for l in array):
return True
else:
return False
答案 0 :(得分:1)
如果你很好地格式化代码,有时这些东西最容易看到。你错过了一些括号:
def checkio(password):
if 10 < len(password) or len(password) > 64:
return False
return (any(l.isdigit() for l in password) and
any(l.isupper() for l in password) and
any(l.islower() for l in password)):
注意,你不应该从密码构造一个列表 - python字符串是可迭代的并且具有明确定义的长度。
答案 1 :(得分:1)
你的括号非常错误。 试试这个。
def checkio(password):
array = list(password)
#for letter in array:
if len(array) < 10 or len(array) > 64:
return False
if ((any(l.isdigit() for l in array)) and (any(l.isupper() for l in array)) and ((any(l.islower() for l in array)))):
return True
else:
return False
答案 2 :(得分:1)
你可以这样做,你缺少一些括号,另一件事是,你说at least
一个数字,长度应该是<1
。您也不需要转换为列表,您可以迭代strings
def checkio(password):
if len(password) < 1 or len(password) > 64:
return False
if (any(x.isdigit() for x in password)) and (any(l.isupper for l in password)) and (any(l.islower for l in password)):
return True
else:
return False
print checkio("StackO3f") #True
print checkio("S") #False
print checkio("sssss") #False
答案 3 :(得分:1)
执行any(l.isdigit() for l in array)
时,您正在创建generator。必须消耗发电机&#34;为了正确的价值。
在这种情况下,您可以通过使用列表来获得更好的服务。此外,对array = list(password)
的调用是不必要的,因为字符串在python中是可迭代的。以下是代码的外观:
def checkio(password):
if len(password) < 10 or len(password) > 64:
return False
if any([c.isdigit() for c in password]) and any([c.islower() for c in password]) and any([c.isupper() for c in password]):
return True
else:
return False
在此版本中,在使用[c.func() for c in password]
创建的临时列表上调用any()函数。