Check if all characters of a string are uppercase

Question:

Say I have a string that can contain different characters:

e.g. word = "UPPER£CASe"

How would I test the string to see if all the characters are uppercase and no other punctuation, numbers, lowercase letters etc?

Asked By: ffgghhffgghh

||

Answers:

You could use regular expressions:

all_uppercase = bool(re.match(r'[A-Z]+$', word))
Answered By: Luke Yeager

You should use str.isupper() and str.isalpha() function.

Eg.

is_all_uppercase = word.isupper() and word.isalpha()

According to the docs:

S.isupper() -> bool

Return True if all cased characters in S are uppercase and there is at
least one cased character in S, False otherwise.

Answered By: Yash Mehrotra

Yash Mehrotra has the best answer for that problem, but if you’d also like to know how to check that without the methods, for purely educational reasons:

import string

def is_all_uppercase(a_str):
    for c in a_str:
        if c not in string.ascii_uppercase:
            return False
    return True
Answered By: Diogo Martins

You can alternatively work at the level of characters.

The following function may be useful not only for words but also for phrases:

def up(string):
    upper=[ch for ch in string if ch.isupper() or ch.isspace()]
    if len(upper)==len(string):
        print('all upper')
    else:
        print("some character(s) not upper")

strings=['UPPERCAS!', 'UPPERCASe', 'UPPERCASE', 'MORE UPPERCASES']
for s in strings:
   up(s)
Out: some character(s) not upper 
Out: some character(s) not upper
Out: all upper
Out: all upper
Answered By: SvitlanaGA

Here you can find a very useful way to check if there’s at least one upper or lower letter in a string

Here’s a brief example of what I found in this link:

print(any(l.isupper() for l in palabra))

https://www.w3resource.com/python-exercises/python-basic-exercise-128.php

Answered By: STATECHRD

Using the same approach taken by Diogo Martins, but using all() and a generator as an alternative to the for/if/return construct for a more elegant and pythonic solution:

import string
is_all_uppercase = all(c in string.ascii_uppercase for c in word)

It avoids scanning the string twice by testing each character only once, and it short-circuits on the first failed character.

Or, to optimize it further:

upper = set('ABCDEFGHIJKLMNOPQRSTUVWXYZ')

is_all_uppercase = all(c in upper for c in word)

However, for common inputs this does not perform better than the accepted solution word.isalpha() and word.isupper(): by using C-compiled builtin methods it beats any pure-python solution even if it scans the string twice:

$ python3 -m timeit -s 'word="UPPER£CASe"; upper=set("ABCDEFGHIJKLMNOPQRSTUWXYZ")' -- 
'all(c in upper for c in word)'
1000000 loops, best of 3: 0.514 usec per loop

$ python3 -m timeit -s 'word="UPPER£CASe"' -- 'word.isupper() and word.isalpha()'
10000000 loops, best of 3: 0.0446 usec per loop

Please note that str.isupper() and str.isalpha() includes Unicode characters such as Greek, Cyrilic ("russian"), Arabic, etc. As long as they’re uppercase 😉

>>> word = "ΓΔΘΞΠΦΨΩБГДЖЙЛ"; word.isupper() and word.isalpha()
True
Answered By: MestreLion
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.