2012-10-17 14 views
15

Ho bisogno di sapere se c'è una funzione che rileva le lettere minuscole in una stringa. Dire ho cominciato a scrivere questo programma:Come rilevare le lettere minuscole in Python?

s = input('Type a word') 

Ci sarebbe una funzione che mi permette di rilevare una lettera minuscola all'interno della stringa s? Probabilmente finire con l'assegnazione di quelle lettere a una variabile diversa, o semplicemente la stampa di lettere minuscole o il numero di lettere minuscole.

Mentre quelli sarebbe quello che mi piacerebbe fare con esso sono più interessato a come rilevare la presenza di lettere minuscole. I metodi più semplici sarebbero i benvenuti, io sono solo in un corso introduttivo di Python quindi il mio insegnante non vorrebbe vedere soluzioni complesse quando prendo il mio mezzo. Grazie per l'aiuto!

+4

'eventuale (c per c in s se c.islower())' rileva la presenza di almeno una lettera minuscola. – eumiro

+1

Stai usando Python 2.xo Python 3.x? –

+0

Perché invitare una risposta errata @NoctisSkytower? Dovrebbe essere 'any (filter (str.islower, s))' – stanleyli

risposta

27

Per verificare se un carattere è in minuscolo, utilizzare il metodo islower di str. Questo semplice programma stampa imperativo tutte le lettere minuscole nella stringa:

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

notare che in Python 3 si dovrebbe usare print(c) invece di print c.


Possibilmente finendo con l'assegnazione di tali lettere a una variabile differente.

Per fare questo ho suggerirei di usare una lista di comprensione, anche se non si può avere ancora coperti questo nel vostro corso:

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

O per ottenere una stringa è possibile utilizzare ''.join con un generatore:

>>> 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 

Stampe:

Type a word: A Title of a Book 
itleofaook ATB 

Oppure si può usare un'espressione di lista/generatore:

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

Stampe:

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

Ci sono 2 modi diversi si può cercare caratteri minuscoli:

  1. Utilizzare str.islower() per trovare i caratteri minuscoli.In combinazione con una lista di comprensione, è possibile raccogliere tutte le lettere minuscole:

    lowercase = [c for c in s if c.islower()] 
    
  2. si potrebbe usare un'espressione regolare:

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

Il primo metodo restituisce un elenco di singoli caratteri, la seconda restituisce una lista di carattere gruppi:

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

Il primo frammento non è quello che pensi che faccia. – georg

+0

@ thg435: Oops. :-P –

+0

Sembra meglio)) A proposito, questo sembra essere un caso d'uso valido per 'filtro' - qualcosa che nessuno ha menzionato finora. – georg

8

È possibile utilizzare la funzione incorporata any e il generatore.

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

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

* 'Probabilmente termina con l'assegnazione di quelle lettere a una variabile diversa' *. L'uso di 'any' impedirà questa opzione. –

+1

"... Sono più interessato a come rilevare la presenza di lettere minuscole." Penso che il mio suggerimento possa essere una risposta. –

3

Si dovrebbe usare raw_input di prendere una stringa di input. quindi utilizzare il metodo islower dell'oggetto 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) 

Basta fare -

dir(s) 

e troverete islower e altri attributi di str

+0

Nota: 'raw_input()' in Python 2.x è sostituito da 'input()' in Python 3.x. Questo è importante poiché l'autore non ha specificato quale versione sta utilizzando. – rbaleksandar

4

Ci sono molti metodi per questo, qui ci sono alcuni di loro:

  1. Utilizzo della funzione predefinita character.islo wer():

    >>> c = 'a' 
    >>> print(c.islower()) #this prints True 
    
  2. Utilizzando la funzione ord() per verificare se il codice ASCII della lettera è nell'intervallo dei codici ASCII dei caratteri minuscoli:

    >>> c = 'a' 
    >>> print(ord(c) in range(97,123)) #this will print True 
    
  3. Verificando la lettera è uguale ad esso è minuscolo:

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

Ma questo non può essere tutto, è ca n trovare il proprio modo se non vi piacciono questi: D.

Infine, cominciamo rilevazione:

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

Cosa aggiunge questo alle altre risposte esistenti? –

+0

Il secondo e il terzo metodo non sono menzionati sopra –