Как определить строчные буквы в Python?

Мне нужно знать, есть ли функция, определяющая строчные буквы в строке. Допустим, я начал писать эту программу:

s = input('Type a word')

Будет ли функция, позволяющая обнаруживать строчную букву в строке s? Возможно, в конечном итоге эти буквы будут присвоены другой переменной или просто напечатаны строчные буквы или количество строчных букв.

Хотя это то, что я хотел бы с этим сделать, меня больше всего интересует, как определить наличие строчных букв. Приветствуются самые простые методы.


person JustaGuy313    schedule 17.10.2012    source источник
comment
if any(c for c in s if c.islower()) определяет наличие хотя бы одной строчной буквы.   -  person eumiro    schedule 17.10.2012
comment
Вы используете Python 2.x или Python 3.x?   -  person Mark Byers    schedule 17.10.2012
comment
Почему проголосовали за неправильный ответ @NoctisSkytower? Это должно быть any(filter(str.islower, s))   -  person stanleyli    schedule 01.05.2015
comment
@stanleyli Спасибо, что указали на это! Должно быть, в первый раз ошибся.   -  person Noctis Skytower    schedule 01.05.2015


Ответы (6)


Чтобы проверить, является ли символ нижним регистром, используйте islower метод str. Эта простая императивная программа печатает все строчные буквы в вашей строке:

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'
person Mark Byers    schedule 17.10.2012

Есть 2 разных способа поиска строчных букв:

  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']
person Martijn Pieters    schedule 17.10.2012
comment
Первый фрагмент не соответствует тому, что вы думаете. - person georg; 17.10.2012
comment
Выглядит лучше)) Кстати, похоже, это допустимый вариант использования filter - о чем до сих пор никто не упоминал. - person georg; 17.10.2012
comment
@ thg435: Я не думаю, что filter(lambda c: c.islower(), s) или filter(methodcaller('islower'), s) настолько читабельны. - person Martijn Pieters; 17.10.2012
comment
@ thg435 Я думаю, что ответы должны быть питоническими. Ваш ... хорошо. - person Hyungoo Kang; 17.10.2012
comment
@MartijnPieters: как насчет filter(str.islower, s)? - person georg; 17.10.2012
comment
@ thg435: Конечно, немного чище; это не сработает для unicode, но отлично подойдет для OP. - person Martijn Pieters; 17.10.2012

Для этого есть много способов, вот некоторые из них:

  1. Используя предопределенный str метод islower():

    >>> c = 'a'
    >>> c.islower()
    True
    
  2. Использование функции ord(), чтобы проверить, находится ли код ASCII буквы в диапазоне кодов ASCII строчных символов:

    >>> c = 'a'
    >>> ord(c) in range(97, 123)
    True
    
  3. Проверка соответствия буквы строчной форме:

    >>> c = 'a'
    >>> c.lower() == c
    True
    
  4. Проверка наличия буквы в списке ascii_lowercase модуля string:

    >>> from string import ascii_lowercase
    >>> c = 'a'
    >>> c in ascii_lowercase
    True
    

Но это может быть еще не все, вы можете найти свой собственный путь, если он вам не нравится: 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 (probably) the most efficient way of doing this
person MrGeek    schedule 04.05.2016
comment
Что это добавляет к другим существующим ответам? - person OneCricketeer; 04.05.2016
comment
Второй и третий способ выше не упомянуты. - person MrGeek; 04.05.2016

Вы должны использовать 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

person Hussain    schedule 17.10.2012
comment
Примечание. raw_input() в Python 2.x заменяется на input() в Python 3.x. Это важно, поскольку автор не указал, какую версию он использует. - person rbaleksandar; 11.12.2015

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
person Community    schedule 17.10.2012

Если вы не хотите использовать библиотеки и хотите получить простой ответ, то код приведен ниже:

  def swap_alpha(test_string):
      new_string = ""
      for i in test_string:
          if i.upper() in test_string:
              new_string += i.lower()

          elif i.lower():
                new_string += i.upper()

          else:
              return "invalid "

      return new_string


user_string = input("enter the string:")
updated = swap_alpha(user_string)
print(updated)
person Pramod Rijal    schedule 14.06.2020