diff --git a/DIRECTORY.md b/DIRECTORY.md index 41485f6f0ca4..5b91cda98b1a 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -424,7 +424,6 @@ * [Binomial Distribution](https://github.com/TheAlgorithms/Python/blob/master/maths/binomial_distribution.py) * [Bisection](https://github.com/TheAlgorithms/Python/blob/master/maths/bisection.py) * [Ceil](https://github.com/TheAlgorithms/Python/blob/master/maths/ceil.py) - * [Check Valid Ip Address](https://github.com/TheAlgorithms/Python/blob/master/maths/check_valid_ip_address.py) * [Chudnovsky Algorithm](https://github.com/TheAlgorithms/Python/blob/master/maths/chudnovsky_algorithm.py) * [Collatz Sequence](https://github.com/TheAlgorithms/Python/blob/master/maths/collatz_sequence.py) * [Combinations](https://github.com/TheAlgorithms/Python/blob/master/maths/combinations.py) @@ -454,6 +453,7 @@ * [Greedy Coin Change](https://github.com/TheAlgorithms/Python/blob/master/maths/greedy_coin_change.py) * [Hardy Ramanujanalgo](https://github.com/TheAlgorithms/Python/blob/master/maths/hardy_ramanujanalgo.py) * [Integration By Simpson Approx](https://github.com/TheAlgorithms/Python/blob/master/maths/integration_by_simpson_approx.py) + * [Is Ip V4 Address Valid](https://github.com/TheAlgorithms/Python/blob/master/maths/is_ip_v4_address_valid.py) * [Is Square Free](https://github.com/TheAlgorithms/Python/blob/master/maths/is_square_free.py) * [Jaccard Similarity](https://github.com/TheAlgorithms/Python/blob/master/maths/jaccard_similarity.py) * [Kadanes](https://github.com/TheAlgorithms/Python/blob/master/maths/kadanes.py) diff --git a/maths/check_valid_ip_address.py b/maths/check_valid_ip_address.py deleted file mode 100644 index 6e8d35ebc44c..000000000000 --- a/maths/check_valid_ip_address.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Checking valid Ip Address. -A valid IP address must be 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 -""" - - -def check_valid_ip(ip: str) -> bool: - """ - print "Valid IP address" If IP is valid. - or - print "Invalid IP address" If IP is Invalid. - - >>> check_valid_ip("192.168.0.23") - True - - >>> check_valid_ip("192.255.15.8") - False - - >>> check_valid_ip("172.100.0.8") - True - - >>> check_valid_ip("254.255.0.255") - False - """ - ip1 = ip.replace(".", " ") - list1 = [int(i) for i in ip1.split() if i.isdigit()] - count = 0 - for i in list1: - if i > 254: - count += 1 - break - if count: - return False - return True - - -if __name__ == "__main__": - ip = input() - output = check_valid_ip(ip) - if output is True: - print(f"{ip} is a Valid IP address") - else: - print(f"{ip} is an Invalid IP address") diff --git a/maths/is_ip_v4_address_valid.py b/maths/is_ip_v4_address_valid.py new file mode 100644 index 000000000000..0ae8e021ead1 --- /dev/null +++ b/maths/is_ip_v4_address_valid.py @@ -0,0 +1,56 @@ +""" +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 +""" + + +def is_ip_v4_address_valid(ip_v4_address: str) -> bool: + """ + print "Valid IP address" If IP is valid. + or + print "Invalid IP address" If IP is invalid. + + >>> is_ip_v4_address_valid("192.168.0.23") + True + + >>> is_ip_v4_address_valid("192.255.15.8") + False + + >>> is_ip_v4_address_valid("172.100.0.8") + True + + >>> is_ip_v4_address_valid("254.255.0.255") + False + + >>> is_ip_v4_address_valid("1.2.33333333.4") + False + + >>> is_ip_v4_address_valid("1.2.-3.4") + False + + >>> is_ip_v4_address_valid("1.2.3") + False + + >>> is_ip_v4_address_valid("1.2.3.4.5") + False + + >>> 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 + """ + 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) + + +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.")