2015-07-02 8 views
1

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

def upper_lower(s): 

    """ (str) -> bool 



>>> upper_lower('abc') 
True 
>>> upper_lower('abcXYZ') 
False 
>>> upper_lower('XYZ') 
True 
""" 
+0

попробуйте использовать 'IsAlpha()' , 'isupper() ',' islower() '. Нет необходимости выполнять функции, когда они доступны как встроенные. – shaktimaan

ответ

1

Regex - это, безусловно, самый эффективный способ сделать это.

Но если вы хотите какой-то вещий аромат в вашем коде, вы можете попробовать это:

'abc'.isupper() 
'ABC'.isupper() 
'abcABC'.isupper() 

upper_lower = lambda s: s.isupper() or s.islower() 
+0

Вы имеете в виду это 'if s.isupper() или s.islower():'? –

+0

@AvinashRaj да, вы правы. В этом случае регулярное выражение будет лучшим решением с точки зрения времени выполнения. – crsxl

1

Использование re.match

if re.match(r'(?:[A-Z]+|[a-z]+)$', s): 
    print("True") 
else: 
    print("Nah") 

Нам не нужно, чтобы добавить начало строки якоря поскольку re.match пытается совместить с началом строки.

Поэтому он входит в блок if, только если строка ввода содержит только строчные буквы или только прописные буквы.

0

Вы можете использовать следующее регулярное выражение:

if re.search('^([a-z]+|[A-Z]+)$', s): 
    # all upper or lower case 

Объяснение: ^ соответствует началу строки, [a-z] и [A-Z] тривиальны матчи, + соответствует одному или более. | - это регулярное выражение «ИЛИ», наконец $ соответствует концу строки.

Или, вы можете использовать all и проверить:

all(c.islower() for c in s) 
# same thing for isupper() 
0

Вы можете собрать все буквы алфавита, а затем проверить, если все или верхняя или все ниже

a=[c for c in s if s.isalpha()] 
if a: 
    if "".join(a).isupper() or "".join(a).islower(): 
    print "yes" 
Смежные вопросы