1 问题
如何用python验证IP地址。
给定一个字符串queryIP。如果是有效的IPv4地址,返回"IPv4";如果是有效的IPv6地址,返回“IPv6”;如果不是上述类型的IP地址,返回“Neither"。
有效的IPv4地址 是“x1.x2.X3.×4”形式的IP地址;其中0<=Xi<=255且Xi不能包含前导零。一个有效的IPv6地址是一个格式为“x1:x2:x3:x4:x5:x6:x7:x8"的IP地址。其中:1<=Xi.length <=4;Xi是一个十六进制字符串,可以包含数字、小写英文字母('a'到‘f')和大写英文字母(‘A'到'F');在Xi中允许前导零。
2 方法
代码清单 1
class Solution:def validIPAddress(self, queryIP: str) -> str:def validIPv6(IP_string): IP_lst = IP_string.split(':') if len(IP_lst) != 8: # IPv6必须由8个子串组成 return False for IP in IP_lst: if not 1 <= len(IP) <= 4: # 每个子串小于4个字符 return False for char in IP: if not ('0' <= char <= '9' or 'a' <= char <= 'f' or 'A' <= char <= 'F'): return False return True def validIPv4(IP_string): IP_lst = IP_string.split('.') if len(IP_lst) != 4: # IPv4必须由4个子串组成 return False for IP in IP_lst: if not IP.isnumeric() or not 0 <= int(IP) <= 255: return False if str(int(IP)) != IP: # 不能有前导0 return False return True for char in queryIP[:5]: if char == '.': return 'IPv4' if validIPv4(queryIP) else 'Neither' elif char == ':': return 'IPv6' if validIPv6(queryIP) else 'Neither' return 'Neither' |
---|
3 结语
针对此类边界条件较多的问题,提出定义类,函数的方法,通过实验,证明该方法是有效的。此方法结合熟练运用了所学的基本python知识,知识虽简单,但需要较清晰的逻辑关系来分类讨论。对验证对象条件的充分理解,是解决此题的关键。希望未来能利用更复杂的python知识解决更多问题。