2012-10-17 61 views
15

我需要知道是否有一個函數檢測字符串中的小寫字母。說我開始寫這個程序:如何在Python中檢測小寫字母?

s = input('Type a word') 

會有一個函數,讓我檢測字符串s中的小寫字母?可能最終將這些字母分配給不同的變量,或者只是打印小寫字母或小寫字母數。

雖然這些將是我想要做的,但我最關心如何檢測小寫字母的存在。最簡單的方法是受歡迎的,我只是在一門Python入門課程中,所以我的老師在參加中期課程時不想看到複雜的解決方案。謝謝您的幫助!

+4

'如果有的話(下以s c。如果c.islower())'檢測至少存在一個小寫字母。 – eumiro

+1

您是使用Python 2.x還是Python 3.x? –

+0

爲什麼upvote錯誤的答案@NoctisSkytower?它應該是'任何(過濾器(str.islower,s))' – stanleyli

回答

27

要檢查字符是否小寫,請使用strislower方法。這個簡單的命令式程序打印所有的小寫字母在你的字符串:

for c in s: 
    if c.islower(): 
     print c 

注意的是Python 3,你應該使用的print(c)代替print c


可能結束了分配這些字母在不同的變量。

要做到這一點,我建議使用列表理解,雖然你可能沒有你的課程涵蓋這個尚未:

>>> s = 'abCd' 
>>> lowercase_letters = [c for c in s if c.islower()] 
>>> print lowercase_letters 
['a', 'b', 'd'] 

或者讓你可以使用''.join與發電機的字符串:

>>> lowercase_letters = ''.join(c for c in s if c.islower()) 
>>> print lowercase_letters 
'abd' 
1
import re 
s = raw_input('Type a word: ') 
slower=''.join(re.findall(r'[a-z]',s)) 
supper=''.join(re.findall(r'[A-Z]',s)) 
print slower, supper 

打印:

Type a word: A Title of a Book 
itleofaook ATB 

或者你可以使用一個列表理解/發電機表達式:

slower=''.join(c for c in s if c.islower()) 
supper=''.join(c for c in s if c.isupper()) 
print slower, supper 

打印:

Type a word: A Title of a Book 
itleofaook ATB 
8

有兩種不同的方式,你可以找小寫字符:

  1. 使用str.islower()查找小寫字符。與列表理解相結合,你可以收集所有小寫字母:

    lowercase = [c for c in s if c.islower()] 
    
  2. 你可以使用正則表達式:

    import re 
    
    lc = re.compile('[a-z]+') 
    lowercase = lc.findall(s) 
    

第一個方法返回單個字符的列表,第二返回一個字符列表

>>> import re 
>>> lc = re.compile('[a-z]+') 
>>> lc.findall('AbcDeif') 
['bc', 'eif'] 
+1

第一個片段不是你認爲的那樣。 – georg

+0

@ thg435:糟糕。 :-P –

+0

看起來更好))順便說一句,這似乎是'過濾器'的有效用例 - 目前還沒有人提到過。 – georg

8

您可以使用內置功能any和發生器。

>>> any(c.islower() for c in 'Word') 
True 

>>> any(c.islower() for c in 'WORD') 
False 
+0

*'可能最終將這些字母分配給不同的變量'*。使用'any'將阻止該選項。 –

+1

「......我最關心如何檢測小寫字母的存在。」我認爲我的建議可以是一個答案。 –

3

您應該使用raw_input來接受字符串輸入。然後使用islower方法str對象。

s = raw_input('Type a word') 
l = [] 
for c in s.strip(): 
    if c.islower(): 
     print c 
     l.append(c) 
print 'Total number of lowercase letters: %d'%(len(l) + 1) 

只是做 -

dir(s) 

,你會發現islower和其他屬性str

+0

注意:Python 2.x中的'raw_input()'被Python 3.x中的'input()'替換。這很重要,因爲作者沒有指定他使用的是哪個版本。 – rbaleksandar

4

有許多方法,這裏有一些人:

  1. 使用預定義的函數character.islo WER():

    >>> c = 'a' 
    >>> print(c.islower()) #this prints True 
    
  2. 使用ord()函數來檢查所述信的ASCII碼是否處於小寫字符的ASCII碼的範圍:檢查是否

    >>> c = 'a' 
    >>> print(ord(c) in range(97,123)) #this will print True 
    
  3. 這封信等於它的小寫:

    >>> c = 'a' 
    >>> print(c.lower()==c) #this will print True 
    

但事實可能並非全部,你CA ñ找到自己的方式,如果你不喜歡這些的:D。

最後,讓我們開始檢測:

d = str(input('enter a string : ')) 
lowers = [c for c in d if c.islower()] 
#here i used islower() because it's the shortest and most-reliable one (being a predefined function), using this list comprehension is the most efficient way of doing this 
+0

這是什麼添加到其他現有答案? –

+0

上面沒有提到第二種和第三種方法 –

相關問題