PythonでIPアドレスを検証する
IPv4アドレスは、ドット付き10進表記で正規に表されます。ドット付き10進表記は、それぞれ0〜255の範囲で、ドット( "。")で区切られた4つの10進数で構成されます。たとえば、192.168.254.1。また、IPv4アドレスの先行ゼロは無効です。たとえば、アドレス192.168.254.01は無効です。
IPv6アドレスは、4桁の16進数の8つのグループとして表され、各グループは16ビットを表します。グループはコロン( ":")で区切られます。たとえば、アドレスが2001:0db8:85a3:0000:0000:8a2e:0370:7334であるとします。また、アドレスの4桁の16進数の先行ゼロと大文字の小文字を省略できるため、2001:db8:85a3:0:0:8A2E:0370:7334このアドレスも有効です
ただし、単純さを追求するために、ゼロ値の連続するグループを2つの連続するコロン(::)を使用する単一の空のグループに置き換えることはありません。したがって、たとえば、2001:0db8:85a3 ::8A2E:0370:7334は無効なIPv6アドレスです。さらに、IPv6の余分な先行ゼロも無効です。アドレス02001:0db8:85a3:0000:0000:8a2e:0370:7334が無効です。
これを解決するには、次の手順に従います-
-
メソッドcheckv4(x)を定義します。これにより、xが0〜255の範囲にあるかどうかがチェックされ、次にtrueになり、そうでない場合はfalseになります
-
メソッドcheckv6(x)を定義します。これは次のように機能します-
-
サイズがx>4の場合、falseを返します
-
x> =0に相当する10進数で、x [0]が「-」でない場合はtrueを返し、それ以外の場合はfalseを返します
-
-
メインメソッドから
-
入力に3つのドットがあり、各部分についてv4(i)がtrueであることを確認した場合は、「IPv4」を返します
-
入力に7つのコロンがあり、各部分でv6(i)がtrueであることを確認した場合は、「IPv6」を返します
例(Python)
理解を深めるために、次の実装を見てみましょう-
class Solution(object): def validIPAddress(self, IP): """ :type IP: str :rtype: str """ def isIPv4(s): try: return str(int(s)) == s and 0 <= int(s) <= 255 except: return False def isIPv6(s): if len(s) > 4: return False try : return int(s, 16) >= 0 and s[0] != '-' except: return False if IP.count(".") == 3 and all(isIPv4(i) for i in IP.split(".")): return "IPv4" if IP.count(":") == 7 and all(isIPv6(i) for i in IP.split(":")): return "IPv6" return "Neither" ob = Solution() print(ob.validIPAddress("172.16.254.1"))
入力
"172.16.254.1"
出力
"IPv4"
-
PythonでIPアドレスのファンを削除する
有効なIPv4IPアドレスがあるとします。 IPアドレスのDefangedバージョンを返す必要があります。削除されたIPアドレスは、基本的に「。」の期間ごとに置き換えられます。 「[。]」によってIPアドレスが「192.168.4.1」の場合、出力は「192[。]168[。]4[。]1」になります これを解決するには、次の手順に従います- ドットを使用して文字列を分割し、各要素を「[。]」で区切って配置します 例 理解を深めるために、次の実装を見てみましょう- class Solution(object): def defangIPaddr(self, add
-
Pythonで複数の値を返しますか?
Python関数は複数の値を返すことができます。これらの値は、変数に直接格納できます。関数は変数を返すように制限されていません。0、1、2、またはそれ以上の値を返すことができます。 これは、C++やJavaなどの他の多くのプログラミング言語では使用できない複数の値/変数を返すPythonのデフォルトのプロパティです。 関数から複数の値を返す場合は、要件に応じてタプル、リスト、またはディクショナリオブジェクトを返すことができます。 方法1:タプルを使用する def func(x): y0 = x+ 1 y1 = x * 3 &