1
1
"""
2
+ wiki: https://en.wikipedia.org/wiki/IPv4
3
+
2
4
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
7
11
"""
8
12
9
13
10
- def is_ip_v4_address_valid (ip_v4_address : str ) -> bool :
14
+ def is_ip_v4_address_valid (ip : str ) -> bool :
11
15
"""
12
16
print "Valid IP address" If IP is valid.
13
17
or
@@ -17,12 +21,15 @@ def is_ip_v4_address_valid(ip_v4_address: str) -> bool:
17
21
True
18
22
19
23
>>> is_ip_v4_address_valid("192.255.15.8")
20
- False
24
+ True
21
25
22
26
>>> is_ip_v4_address_valid("172.100.0.8")
23
27
True
24
28
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")
26
33
False
27
34
28
35
>>> is_ip_v4_address_valid("1.2.33333333.4")
@@ -40,17 +47,33 @@ def is_ip_v4_address_valid(ip_v4_address: str) -> bool:
40
47
>>> is_ip_v4_address_valid("1.2.A.4")
41
48
False
42
49
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")
47
51
False
48
52
"""
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
51
74
52
75
53
76
if __name__ == "__main__" :
54
77
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