2015-04-05 54 views
3

我用我的代碼這一行字符串中的計數大寫字母:方法isupper Unicode的友好

text = "Áno" 
count = sum(1 for c in text if c.isupper()) 

此代碼返回0,預期爲1(作爲一個大寫) 我怎樣才能用unicode字符統計大寫字母? 感謝

回答

3

對於Python 2,你需要添加一個u,您的字符串是不實際的Unicode:

text = u"Áno" 

你也可以寫你的表達count = sum(c.isupper() for c in text)c.isupper()將返回真或假使1或0。

In [1]: text = "Áno" 

In [2]: count = sum(c.isupper() for c in text) 

In [3]: count 
Out[3]: 0  
In [4]: text = u"Áno" 
In [5]: count = sum(c.isupper() for c in text)  
In [6]: count 
Out[6]: 1 
In [7]: text = "Áno".decode("utf-8") 
In [8]: count = sum(c.isupper() for c in text)  
In [9]: count 
Out[9]: 1 
+0

(1)如果是Python的2那麼也應該在頂部的編碼聲明(允許非ASCII字符串文字)。 (2)您還可以添加'from __future__ import unicode_literals'來使Unicode成爲字符串文本的默認值。 (3)如果你只對True/False感興趣,那麼'any(c.isupper()for c in text)'。 – jfs 2015-04-05 17:44:13

0

在Python 2,str.isupper()方法僅適用於ASCII字符。你幾乎可以肯定有一個Python 2字節字符串,它將取決於你在那裏確切的字節的編碼,但它們不會是有效的ASCII字節。

解碼字符串爲Unicode值或使用Unicode文本(u'Áno'),使unicode.isupper()可根據Unicode標準確定大寫字符:

>>> u'Áno'[0].isupper() 
True 

您可能需要Python和Unicode的閱讀起來:

0

的英文單詞有所有英文大寫字母的模塊。如果你把你所有的英文大寫字母在一個變量,下面的代碼也工作:

import string 
a=string.ascii_uppercase 
s='ThiS is A tEst' 
count=0 
for i in s: 
    if i in a: 
     count+=1 

print(count)