2017-10-22 65 views
1

当我输入下面的代码,它说:我可以使用函数'count()'来查找密码中大写字母的数量吗? (蟒蛇)

TypeError: must be str, not list

这是否意味着我不能使用功能计数()或有另一种方式,我可以编程吗?

password = "CheeseMakesMeHappy" 
uppercase =["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"] 
print (password.count(uppercase)) 
+0

“count()方法搜索给定字符串中的子字符串,并返回子字符串存在的次数。”这里你提供列表作为计数函数的参数而不是子字符串,它会引发“TypeError:必须是str,而不是列表 ” –

+0

建议:'import string'然后使用'string.ascii_uppercase'。 – 2017-10-22 01:53:14

回答

2

只需检查密码中的每个字符,并检查它是否是大写字符。 例如:

def count_upper(text): 
    count = 0 
    for c in text: 
     if c.isupper(): 
      count+=1 
    return count 

print count_upper("FoOoObA") 

的另一种方法是使用几组和位掩码来计数的独特大写字符数。

password = "CheeseMakesMeHappy" 
uppercase = set(["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]) 
print len(set(password)&uppercase) 

set解决方案无论如何都只能算唯一的字符,但在密码强度计量的情况下,可能不会是一个坏主意。

0

问题是方法count()需要一个字符串对象。现在,使用这一行(password.count(uppercase)),您正在有效地将Array对象传递给您的函数。看到zeraien的答案是一个好的解决方案。

相关问题