Reputation: 133
This is an IP address problem where I need to implement a function is_valid_IP that takes an arbitrary string and determines if it represents a valid IPv4 or IPv6 address.
IPv4_STRING = "127.0.0.1"
IPv4_INVALID_STRING = "300.0.0.1"
IPv6_STRING = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
IPv6_INVALID_STRING = "2001:0db8:85a3:0000:0000:8a2e:0370:7334:7334"
INVALID_IP_STRING = "Some arbitrary string"
def is_valid_IPv4_octet(octet: str):
for element in ip_list:
if int(element) < 0 or int(element) > 255 :
return False
return True
def is_valid_IPv4(ip: str):
if ip.count('.') != 3:
return False
quit()
ip_list = list(map(str, ip.split('.')))
return is_valid_IPv4_octet(ip_list)
def is_valid_IPv6_hextet(hextet: str):
for element in ip_list:
if int(element,16) < 0 or int(element,16)>65535 :
return False
return True
def is_valid_IPv6(ip: str):
if ip.count(':')!=7:
return False
quit()
ip_list=list(map(str,ip.split(':')))
return is_valid_IPv6_hextet(ip_list)
def is_valid_IP(ip: str):
if( is_valid_IPv4() or is_valid_IPv6() == True):
print("Valid IP Address")
else:
print("Invalid IP Address")
print(
f"{IPv4_STRING} is a valid IP Address:",
is_valid_IP(IPv4_STRING))
print(
f"{IPv4_INVALID_STRING} is a valid IP Address:",
is_valid_IP(IPv4_INVALID_STRING),
)
print(
f"{IPv6_STRING} is a valid IP Address:",
is_valid_IP(IPv6_STRING))
print(
f"{IPv6_INVALID_STRING} is a valid IP Address:",
is_valid_IP(IPv6_INVALID_STRING),
)
print(
f"{INVALID_IP_STRING} is a valid IP Address:",
is_valid_IP(INVALID_IP_STRING),
)
The IDE gives me
Traceback (most recent call last):
File "C:\Users\jerry\PycharmProjects\pythonProject1\main.py", line 43, in <module>
is_valid_IP(ip)
File "C:\Users\jerry\PycharmProjects\pythonProject1\main.py", line 38, in is_valid_IP
if( is_valid_IPv4() or is_valid_IPv6() == True):
TypeError: is_valid_IPv4() missing 1 required positional argument: 'ip'
Can someone tell me why? I've been surfing a bit, the general opinion is i need to put something in the bracket of the function. But in this case there is somehting inside...So i dont really know where went wrong.
Upvotes: 0
Views: 89
Reputation: 593
def is_valid_IP(ip: str):
if( is_valid_IPv4() or is_valid_IPv6() == True):
print("Valid IP Address")
else:
print("Invalid IP Address")
here you are calling 2 functions is_valid_IPv4
and is_valid_IPv6
. These 2 need an input which is ip.
Upvotes: 1
Reputation: 396
You are missing the arguments here:
def is_valid_IP(ip: str):
#added ip
if( is_valid_IPv4(ip) or is_valid_IPv6(ip) == True):
print("Valid IP Address")
else:
print("Invalid IP Address")
Also since the functions already return True or False you can get rid of the == True
def is_valid_IP(ip: str):
if( is_valid_IPv4(ip) or is_valid_IPv6(ip)):
print("Valid IP Address")
else:
print("Invalid IP Address")
Upvotes: 3