2017-10-22 64 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的答案是一個好的解決方案。

相關問題