2012-10-17 10 views
15

Muszę wiedzieć, czy istnieje funkcja, która wykrywa małe litery w ciągu znaków. Powiedzmy, że zacząłem pisać ten program:Jak wykrywać małe litery w Pythonie?

s = input('Type a word') 

Czy istnieje funkcja, która pozwala mi wykryć małą literę w ciągu s? Prawdopodobnie kończy się przypisaniem tych liter do innej zmiennej lub po prostu drukowaniem małych liter lub małych liter.

Będąc tym, co chciałbym z nim zrobić, najbardziej interesuje mnie wykrywanie obecności małych liter. Najprostsze metody byłyby mile widziane, jestem tylko na wstępnym kursie Pythona, więc mój nauczyciel nie chciałby widzieć złożonych rozwiązań, kiedy biorę moją średnią. Dzięki za pomoc!

+4

'jeśli (c dla c ws jeśli c.islower())' wykrywa obecność co najmniej jednej małej litery. – eumiro

+1

Czy używasz Python 2.x lub Python 3.x? –

+0

Po co zwrócić uwagę na błędną odpowiedź @NoctisSkytower? Powinien to być 'any (filter (str.islower, s))' – stanleyli

Odpowiedz

27

Aby sprawdzić, czy znak ma małe litery, należy użyć metody islower z str. To proste wydruki imperatyw programowe wszystkie małe litery w swoim ciąg:

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

pamiętać, że w Pythonie 3 należy użyć print(c) zamiast print c.


Ewentualnie kończąc przypisując te listy do innej zmiennej.

Aby to proponuję przy użyciu wyrażeń listowych zrobić, choć może nie objęły tego jeszcze w toku:

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

lub uzyskać ciąg można użyć ''.join z generatorem:

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

Wydruki:

Type a word: A Title of a Book 
itleofaook ATB 

Albo można użyć wyrażenia listowego/prądnicy:

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

Drukuje:

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

Są to 2 różne sposoby można szukać małych liter:

  1. Aby znaleźć małe litery, użyj str.islower().W połączeniu z listowego, można zebrać wszystkie małe litery:

    lowercase = [c for c in s if c.islower()] 
    
  2. Można użyć wyrażenia regularnego:

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

Pierwsza metoda zwraca listę poszczególnych znaków, drugi zwraca listę znaków grup:

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

Pierwszy fragment kodu nie jest zgodny z Twoim zdaniem. – georg

+0

@ thg435: Ups. :-P –

+0

Wygląda lepiej)) BTW, to wydaje się być ważnym przypadkiem użycia dla 'filtru '- czegoś, o czym nikt dotąd nie wspominał. – georg

8

Możesz użyć wbudowanej funkcji any i generatora.

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

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

* "Prawdopodobnie skończy się przypisaniem tych liter do innej zmiennej" *. Użycie 'any' wyklucza tę opcję. –

+1

"... Najbardziej interesuje mnie wykrywanie obecności małych liter." Myślę, że moja sugestia może być odpowiedzią. –

3

Należy użyć raw_input wziąć wejście ciąg. następnie użyj obiektu islower obiektu o numerze 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) 

Wystarczy zrobić -

dir(s) 

a znajdziecie islower i inne atrybuty str

+0

Uwaga: 'raw_input()' w Pythonie 2.x jest zamieniane na 'input()' w Pythonie 3.x. Jest to ważne, ponieważ autor nie określił, której wersji używa. – rbaleksandar

4

Istnieje wiele metod na to, oto niektóre z nich:

  1. Używanie predefiniowanej funkcji character.islo wer():

    >>> c = 'a' 
    >>> print(c.islower()) #this prints True 
    
  2. Korzystanie z funkcji ord(), aby sprawdzić, czy kod ASCII listu znajduje się w zakresie kodów ASCII małych liter:

    >>> c = 'a' 
    >>> print(ord(c) in range(97,123)) #this will print True 
    
  3. sprawdzenie czy list jest równa to małe:

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

Ale to nie może być wszystkim, ca n znaleźć własne sposoby, jeśli nie lubisz tych co: D.

Wreszcie, zacznijmy wykrywania:

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

Co to powoduje dodanie innych, istniejących odpowiedzi? –

+0

Druga i trzecia metoda nie są wymienione powyżej –