2022年12月10日のAtCoder ABC281のB問題で文字種類の判定がわからなかった。
これまでちゃんと理解しようとしなかったことを後悔した。
アプリなどでユーザーが入力することがある時に必須ですよね。
https://atcoder.jp/contests/abc281/tasks/abc281_b
文字判定の種類は何があるのか?
文字判定の種類は何があるか書籍で確認してみました。
- isalnum()
- isalpha()
- isascii()
- isdecimal()
- isdigit()
- isnumeric()
- isidentifier()
- islower()
- isupper()
- istitle()
- isprintable()
- isspace()
違いがよくわからないものが結構あります。
isalnum():英数字
print('abc123'.isalnum()) # True
print('abc++'.isalnum()) # False
isalpha():英字
print('abcde'.isalpha()) # True
print('abc123'.isalpha()) # False
isascii():ASCII文字
print('abc'.isascii()) # True
print('あいう'.isascii()) # False
isdecimal():10進数
print('100'.isdecimal()) # True
print('0x64'.isdecimal()) # False
isdigit():数値
print('1234'.isdigit()) # True
print('1234.56'.isdigit()) # False
isnumeric():数値文字
print('百万'.isnumeric()) # True
print('million'.isnumeric()) # False
isidentifier():有効な識別子
print('abc_123'.isidentifier()) # True
print('abc-123'.isidentifier()) # False
islower():小文字
print('test'.islower()) # True
print('Test'.islower()) # False
isupper():大文字
print('TEST'.isupper()) # True
print('Test'.isupper()) # False
istitle():先頭文字が大文字
print('Atcoder Test'.istitle()) # True
print('AtCoder Test'.istitle()) # False
isspace():空白文字
print(' '.isspace()) # True
print('test'.isspace()) # False
isidentifierがいまいちわからないです。。
isdigit、isdecimalの違い
isdigit、isdecimal、isnumericの違いについて本に以下のようにありました。
”isdecimalはアラビア数字だけ認める、isdigitはそれに加えて上付き数字のような文字も含める、isnumericはさらに漢数字・ローマ字数字のような文字も含める。”
しかし、isdigitとisdecimalの違いはまだやっぱり理解できない。
↑このサイトにわかりやすくありました。
”isdigit メソッドは文字列中のすべての文字が数字で使われる文字で、かつ 1 文字以上ある場合に真を返します。”
なるほど。1文字か1文字以上かで違うようです。AtCoderの解説コードの使い方も納得です。
文字種類を判定が必要なのはすごいプログラマーだけだと思っていたのですが、こうしてみると必須ですね。