检查列表中的元素

时间:2014-11-10 22:55:11

标签: python list element contain

我花了几个小时来解决这个问题,但程序没有工作(语法错误)。 为类似问题寻找答案并没有帮助。以下代码有什么问题? 如果列表(密码)包含至少一个数字,并且其中包含一个大写字母和一个小写字母,我想要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

4 个答案:

答案 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()函数。