分享

用python验证IP地址

 算法与编程之美 2024-04-13 发布于四川

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. 首先定义Solution类;

  2. 定义两个子函数判断两种IP串;

  3. 运用多层判断,根据IP地址子串,字符等存在条件进行验证。

  4. 遍历前五个字符。

    因为“或”一定出现在前五个字符中。

代码清单 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知识解决更多问题。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多