Skip to content

Commit ba356ca

Browse files
author
m.tavasoli
committed
fix is_ip_v4_address_valid
1 parent f3f32ae commit ba356ca

File tree

1 file changed

+38
-15
lines changed

1 file changed

+38
-15
lines changed

maths/is_ip_v4_address_valid.py

+38-15
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
"""
2+
wiki: https://en.wikipedia.org/wiki/IPv4
3+
24
Is IP v4 address valid?
3-
A valid IP address must be four octets in the form of A.B.C.D,
4-
where A,B,C and D are numbers from 0-254
5-
for example: 192.168.23.1, 172.254.254.254 are valid IP address
6-
192.168.255.0, 255.192.3.121 are invalid IP address
5+
A valid IP address must be four numbers in the form of A.B.C.D,
6+
where A,B,C and D are numbers from 0-255
7+
8+
for example:
9+
192.168.23.1, 172.254.254.254 are valid IP address
10+
192.168.01.0, 256.192.3.121 are invalid IP address
711
"""
812

913

10-
def is_ip_v4_address_valid(ip_v4_address: str) -> bool:
14+
def is_ip_v4_address_valid(ip: str) -> bool:
1115
"""
1216
print "Valid IP address" If IP is valid.
1317
or
@@ -17,12 +21,15 @@ def is_ip_v4_address_valid(ip_v4_address: str) -> bool:
1721
True
1822
1923
>>> is_ip_v4_address_valid("192.255.15.8")
20-
False
24+
True
2125
2226
>>> is_ip_v4_address_valid("172.100.0.8")
2327
True
2428
25-
>>> is_ip_v4_address_valid("254.255.0.255")
29+
>>> is_ip_v4_address_valid("0.0.0.0")
30+
True
31+
32+
>>> is_ip_v4_address_valid("254.256.0.255")
2633
False
2734
2835
>>> is_ip_v4_address_valid("1.2.33333333.4")
@@ -40,17 +47,33 @@ def is_ip_v4_address_valid(ip_v4_address: str) -> bool:
4047
>>> is_ip_v4_address_valid("1.2.A.4")
4148
False
4249
43-
>>> is_ip_v4_address_valid("0.0.0.0")
44-
True
45-
46-
>>> is_ip_v4_address_valid("1.2.3.")
50+
>>> is_ip_v4_address_valid("1.2.3.05")
4751
False
4852
"""
49-
octets = [int(i) for i in ip_v4_address.split(".") if i.isdigit()]
50-
return len(octets) == 4 and all(0 <= int(octet) <= 254 for octet in octets)
53+
54+
parts = ip.split('.')
55+
56+
if len(parts) != 4:
57+
return False
58+
59+
for part in parts:
60+
if not part:
61+
return False
62+
63+
for i in range(len(part)):
64+
if not part[i].isdigit():
65+
return False
66+
67+
if part[0] == '0' and len(part) > 1:
68+
return False
69+
70+
if not (0 <= int(part) <= 255):
71+
return False
72+
73+
return True
5174

5275

5376
if __name__ == "__main__":
5477
ip = input().strip()
55-
valid_or_invalid = "valid" if is_ip_v4_address_valid(ip) else "invalid"
56-
print(f"{ip} is a {valid_or_invalid} IP v4 address.")
78+
result = "valid" if is_ip_v4_address_valid(ip) else "invalid"
79+
print(f"{ip} is a {result} IPv4 address.")

0 commit comments

Comments
 (0)