Pythonのisupperとislowerで大文字・小文字を判定

is-upper-and-is-lower

Pythonで文字列がアルファベットの大文字であるかどうかを判定する関数にstr.isupperがあります。また、小文字であるかどうかを判定する際にはstr.islower関数を使用できます。この記事ではこれらの関数を用いた大文字・小文字判定について解説します。

isupper, islower関数の仕様

冒頭でも述べたように、これらの関数は文字列の大文字・小文字を判定する際に使用します。組み込み関数なので、モジュールを追加でimportしなくてもデフォルトで使用することができます。

isupperで全てのアルファベットが大文字かどうかを判定

str.isupperは、呼び出し元の文字列内のアルファベットが全て大文字だった場合にTrueを返します。また、それ以外の場合はFalseが返ります。文字列中にアルファベット以外の文字が含まれている場合、その文字は考慮されません。文字列中にアルファベットが含まれなければFalseが返ります。

islowerで全てのアルファベットが小文字かどうかを判定

反対に、str.islowerは呼び出し元の文字列内のアルファベットが全て小文字だとTrueを返します。str.isupperと同様に、アルファベットが含まれなければFalseが返ります。

使い方

"foo".isupper()"foo".islower()のように文字列から呼び出す形で使用します。以下はサンプルコードです。

str = input()
if str.isupper():
    print("Upper String")
elif str.islower():
    print("Lower String")
else:
    print("Others")

標準入力から文字列strを取得して、strの各文字が大文字だけなら”Upper String”が出力されます。小文字だけなら”Lower String”、その他の文字が含まれれば”Others”が出力されます。

文字列ごとの返り値一覧

挙動を理解するために、いくつかの文字列に対する両関数の出力を載せておきます。

空文字の場合

空文字列の返り値は間違いやすいので注意してください。どちらの関数も共に偽(False)となります。

文字列isupperの返り値islowerの返り値
"" (空文字列)FalseFalse

一文字の場合

一文字の場合は単純です。その文字が大文字か小文字かがそのまま真偽値として返ってきます。アルファベット以外の文字が一文字ある場合はすぐ後で述べます。

文字列isupperの返り値islowerの返り値
"A"TrueFalse
"a"FalseTrue

二文字以上の場合

二文字以上で注意するべきは、全てのアルファベットが大文字(または小文字)でないといけないということです。

文字列isupperの返り値islowerの返り値
"AB"TrueFalse
"Ab"FalseFalse
"ab"FalseTrue

アルファベット以外の文字を含む場合

アルファベット以外の文字(!やスペースなど)を含む文字列では、それらの文字を無視したときと同じ値が返ってきます。

文字列isupperの返り値islowerの返り値
"!"FalseFalse
"AB!"TrueFalse
"Ab!"FalseFalse
"ab!"FalseTrue

同等の関数を自作

もし自作するのであれば、以下のような実装になるかと思います。初学者でも理解しやすいように、リスト内包表記などは使用しないで記述しています。実際に利用することはないかもしれないですが、学習時に参考にしてみてください。

def is_upper(str):
    result = False
    for c in str:
        if not c.isalpha():
            continue
        if ord('A') <= ord(c) and ord(c) <= ord('Z'):
            result = True
        else:
            return False
    return result


def is_lower(str):
    result = False
    for c in str:
        if not c.isalpha():
            continue
        if ord('a') <= ord(c) and ord(c) <= ord('z'):
            result = True
        else:
            return False
    return result


str = input()
print(is_upper(str))
print(is_lower(str))