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 &