From ba356ca4b445f1e1376f5ab8a35d7417ea2a2ca3 Mon Sep 17 00:00:00 2001 From: "m.tavasoli" Date: Sat, 23 Nov 2024 20:45:58 +0330 Subject: [PATCH 1/3] fix is_ip_v4_address_valid --- maths/is_ip_v4_address_valid.py | 53 +++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/maths/is_ip_v4_address_valid.py b/maths/is_ip_v4_address_valid.py index 0ae8e021ead1..ba79d1c8b06e 100644 --- a/maths/is_ip_v4_address_valid.py +++ b/maths/is_ip_v4_address_valid.py @@ -1,13 +1,17 @@ """ +wiki: https://en.wikipedia.org/wiki/IPv4 + Is IP v4 address valid? -A valid IP address must be four octets in the form of A.B.C.D, -where A,B,C and D are numbers from 0-254 -for example: 192.168.23.1, 172.254.254.254 are valid IP address - 192.168.255.0, 255.192.3.121 are invalid IP address +A valid IP address must be four numbers in the form of A.B.C.D, +where A,B,C and D are numbers from 0-255 + +for example: + 192.168.23.1, 172.254.254.254 are valid IP address + 192.168.01.0, 256.192.3.121 are invalid IP address """ -def is_ip_v4_address_valid(ip_v4_address: str) -> bool: +def is_ip_v4_address_valid(ip: str) -> bool: """ print "Valid IP address" If IP is valid. or @@ -17,12 +21,15 @@ def is_ip_v4_address_valid(ip_v4_address: str) -> bool: True >>> is_ip_v4_address_valid("192.255.15.8") - False + True >>> is_ip_v4_address_valid("172.100.0.8") True - >>> is_ip_v4_address_valid("254.255.0.255") + >>> is_ip_v4_address_valid("0.0.0.0") + True + + >>> is_ip_v4_address_valid("254.256.0.255") False >>> is_ip_v4_address_valid("1.2.33333333.4") @@ -40,17 +47,33 @@ def is_ip_v4_address_valid(ip_v4_address: str) -> bool: >>> is_ip_v4_address_valid("1.2.A.4") False - >>> is_ip_v4_address_valid("0.0.0.0") - True - - >>> is_ip_v4_address_valid("1.2.3.") + >>> is_ip_v4_address_valid("1.2.3.05") False """ - octets = [int(i) for i in ip_v4_address.split(".") if i.isdigit()] - return len(octets) == 4 and all(0 <= int(octet) <= 254 for octet in octets) + + parts = ip.split('.') + + if len(parts) != 4: + return False + + for part in parts: + if not part: + return False + + for i in range(len(part)): + if not part[i].isdigit(): + return False + + if part[0] == '0' and len(part) > 1: + return False + + if not (0 <= int(part) <= 255): + return False + + return True if __name__ == "__main__": ip = input().strip() - valid_or_invalid = "valid" if is_ip_v4_address_valid(ip) else "invalid" - print(f"{ip} is a {valid_or_invalid} IP v4 address.") + result = "valid" if is_ip_v4_address_valid(ip) else "invalid" + print(f"{ip} is a {result} IPv4 address.") From 0f3c63319d9b1c0e3753a29897513b709b24dea3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 23 Nov 2024 17:22:11 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/is_ip_v4_address_valid.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/maths/is_ip_v4_address_valid.py b/maths/is_ip_v4_address_valid.py index ba79d1c8b06e..814415d9fdd6 100644 --- a/maths/is_ip_v4_address_valid.py +++ b/maths/is_ip_v4_address_valid.py @@ -51,25 +51,25 @@ def is_ip_v4_address_valid(ip: str) -> bool: False """ - parts = ip.split('.') + parts = ip.split(".") if len(parts) != 4: return False - + for part in parts: if not part: return False - + for i in range(len(part)): if not part[i].isdigit(): return False - if part[0] == '0' and len(part) > 1: + if part[0] == "0" and len(part) > 1: return False - - if not (0 <= int(part) <= 255): + + if not (0 <= int(part) <= 255): return False - + return True From 3b2b09bcae6bd8c6c5d654768d5f57e294bd36ef Mon Sep 17 00:00:00 2001 From: Maxim Smolskiy Date: Mon, 30 Dec 2024 13:18:32 +0300 Subject: [PATCH 3/3] Update is_ip_v4_address_valid.py --- maths/is_ip_v4_address_valid.py | 48 +++++++++++++++------------------ 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/maths/is_ip_v4_address_valid.py b/maths/is_ip_v4_address_valid.py index 814415d9fdd6..305afabffed3 100644 --- a/maths/is_ip_v4_address_valid.py +++ b/maths/is_ip_v4_address_valid.py @@ -2,12 +2,10 @@ wiki: https://en.wikipedia.org/wiki/IPv4 Is IP v4 address valid? -A valid IP address must be four numbers in the form of A.B.C.D, -where A,B,C and D are numbers from 0-255 - -for example: - 192.168.23.1, 172.254.254.254 are valid IP address - 192.168.01.0, 256.192.3.121 are invalid IP address +A valid IP address must be four octets in the form of A.B.C.D, +where A, B, C and D are numbers from 0-255 +for example: 192.168.23.1, 172.255.255.255 are valid IP address + 192.168.256.0, 256.192.3.121 are invalid IP address """ @@ -20,16 +18,13 @@ def is_ip_v4_address_valid(ip: str) -> bool: >>> is_ip_v4_address_valid("192.168.0.23") True - >>> is_ip_v4_address_valid("192.255.15.8") - True + >>> is_ip_v4_address_valid("192.256.15.8") + False >>> is_ip_v4_address_valid("172.100.0.8") True - >>> is_ip_v4_address_valid("0.0.0.0") - True - - >>> is_ip_v4_address_valid("254.256.0.255") + >>> is_ip_v4_address_valid("255.256.0.256") False >>> is_ip_v4_address_valid("1.2.33333333.4") @@ -47,27 +42,28 @@ def is_ip_v4_address_valid(ip: str) -> bool: >>> is_ip_v4_address_valid("1.2.A.4") False + >>> is_ip_v4_address_valid("0.0.0.0") + True + + >>> is_ip_v4_address_valid("1.2.3.") + False + >>> is_ip_v4_address_valid("1.2.3.05") False """ - - parts = ip.split(".") - - if len(parts) != 4: + octets = ip.split(".") + if len(octets) != 4: return False - for part in parts: - if not part: + for octet in octets: + if not octet.isdigit(): return False - for i in range(len(part)): - if not part[i].isdigit(): - return False - - if part[0] == "0" and len(part) > 1: + number = int(octet) + if len(str(number)) != len(octet): return False - if not (0 <= int(part) <= 255): + if not 0 <= number <= 255: return False return True @@ -75,5 +71,5 @@ def is_ip_v4_address_valid(ip: str) -> bool: if __name__ == "__main__": ip = input().strip() - result = "valid" if is_ip_v4_address_valid(ip) else "invalid" - print(f"{ip} is a {result} IPv4 address.") + valid_or_invalid = "valid" if is_ip_v4_address_valid(ip) else "invalid" + print(f"{ip} is a {valid_or_invalid} IPv4 address.")