Python プログラミング メモ

PythonでIPv4アドレスを判定する

「IPアドレスのIPv4を判定せよ!」という実装を考えた場合について考えました。

IPv4は理論上、0.0.0.0 ~ 255.255.255.255 の範囲で割り当てられます。

実質的には使用されない組み合わせが存在するようですが、今回は理論上の範囲を全て網羅するように実装しました。

まず、上記の実装を考えた時に、私はスプリットして、「.」をカウントして数値が範囲内であるか判定・・・

みたいな考え方でやってしまいました。

この超面倒な実装でも解決はできたのですが、もっと上手く書けないものか?と考えてみました。

あまりにもスマートさに欠けたコードだったもので。

私の検索の仕方が悪いのか?ググってもコレ!っといったIPv4のアドレス判定の実装例が見つかりませんでした。

もっとも、IPv4を判定する事に需要がないだけなのかも知れませんが。

色々と方法はあると思いますが、最終的に行き着いたのは正規表現を用いる実装です。

自分なりに調べた結果、たぶん、まず最初に正規表現を使った実装を考える人の方が多いでしょう。。

今回の実装について、おそらくもっと美しく整えられるであろうと思いつつも、そのまま実装した、ちょっと悪い例です。

 

import re

# 標準入力で "255.255.255.255"
s = input()
x = re.fullmatch(r"([2][0-5][0-5]|[1][\d][\d]|[\d][\d]|[\d])"
                 r"\.([2][0-5][0-5]|[1][\d][\d]|[\d][\d]|[\d])"
                 r"\.([2][0-5][0-5]|[1][\d][\d]|[\d][\d]|[\d])"
                 r"\.([2][0-5][0-5]|[1][\d][\d]|[\d][\d]|[\d])",
                 s)
# 0.0.0.0 ~ 255.255.255.255 の範囲内であれば True
# 範囲外であれば Falseを返す
if x is None:
    print(False)
else:
    print(True)

 

正規表現を使いこなせれば、文字列の操作や処理が非常に楽になります。

ごちゃごちゃとした汚いコードになる事を防ぐだけでなく、処理も軽くなるはずです。

もっと、色々なパターンで実装していきたいと思います。

-Python, プログラミング, メモ

Copyright© donguri.pyのblog , 2024 All Rights Reserved.