Pythonでは、「 in 」を使うと対象の文字列に特定の文字が含まれるかチェックすることができ、これを応用することで「 不正文字チェック 関数」を作ることが出来ます。
この記事では、以下の処理にフォーカスを当ててサンプルソースを使いながら説明していきたいと思います。
- 特定の文字列を含むか判定する処理
- 特定の文字列を含まないか判定する処理
- 不正文字チェック関数(応用編)
対象レベル
Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。
詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。
サンプルソースを読むうえで理解しておきたいこと
基本的にこの章の内容は読み飛ばしてOKです。サンプルソースでわからないところがあれば参照してみてください。
特定の文字列を含むか
まず初めに、特定の文字を含むかどうかの処理についてです。
コメントの通り、2行目の処理では 「a」は「abcdef」に含まれるか? という判定を行っています。この場合は「a」は含まれているので「True」を返します。
5行目では、「z」は 「abcdef」 に含まれていないので「False」を返します。
実行結果は以下になります。正しく判定されていますね。

特定の文字列を含まないか
次に、特定の文字を含まないかどうかの判定です。
こちらのソースは先ほどのソースの「in」の部分が「not in」に書き換わっています。判定結果は先ほどの処理と逆になります。
なので2行目では「False」を5行目では「True」を返します。
想定通りの実行結果となりました。

応用編 不正文字列のチェック関数
作成した関数のサンプルソースはこちらです。
処理について説明していくと、12行目と13行目で「check」という関数を呼び出しています。
12行目でcheck関数に渡している引数は「abc」、13行目では「abc=」となっています。
スポンサーリンク
print(check('abc'))print(check('abc='))
呼び出されている関数の仕様は、文字列の引数に記号が含まれている場合、「True」を返す。含まれない場合は「False」を返すようになっています。
6行目のfor文では受け取った文字列を1文字ずつ取り出します。細かく説明すると「list(文字列)」で1文字ずつの配列を作成し、「for in」で作成した配列から1文字ずつ文字を取り出しています。
そして7行目で取り出した文字(変数char)が記号を定義した文字列(string.punctuation)に含まれているかどうかを判断します。含まれている文字を検出した時点で「True」を返します。
全ての文字列をチェックするとfor文を抜けるでその場合は、「False」を返します。
def check(str_args): for char in list(str_args): if char in string.punctuation:return True return False
実行結果が以下になります。13行目の「 print(check(‘abc=’)) 」ではcheck関数の文字列の引数に「イコール」が含まれているので「True」を返します。

まとめ
「in」を使うと特定の文字列を含むか判断できる、「not in」を使うと含まないとなる
「stringモジュール」と「in」を組み合わせると不正文字チェック関数が作れる