Python3实现IP地址校验与十六进制转换
本文介绍在Python3中判断输入字符串是否为合法点分十进制IP地址的方法,并提供三种实现方案。若合法则转换为大写16进制格式输出,否则输出Error。内容涵盖正则匹配、列表解析及基础循环判断,适用于Python基础学习与网络编程场景。
Python3 IP地址校验与转换概述
本文分享使用Python3判断IP地址的具体代码实现,供读者参考学习。
程序接收一个字符串输入,首先判断其是否符合点分十进制IP地址的格式。如果符合,则将其转换为16进制格式输出;如果不符合,则输出“Error”。
需要注意,输入的字符串可能是任意内容,例如“abc.bas.fefe.4r4”或“23.23.11.23.123”等。这些情况均不属于合法的IP地址,程序应正确识别并返回错误提示。
输入输出示例说明
以下是具体的输入输出示例:
假设输入为:192.41.6.20
程序输出结果为:0xC0290614
若输入为:257.32.23.1
由于257超出IP段合法范围(0-255),程序输出:Error
代码实现方案一:正则表达式匹配
第一种解法:
import re
def isIP(str):
p = re.compile('^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$')
if p.match(str):
return True
# else:
# return False
myStr = input()
if isIP(myStr):
print(IP(myStr).strHex().upper())
# ip = list(map(int, myStr.split('.')))
# print('0x', end='')
# for i in ip:
# print(hex(i)[2:].upper().rjust(2, '0'), end='')
else:
print('Error')
代码实现方案二:列表解析与类型转换
第二种解法:
def change(lis):
if len(lis)!=4:
return 'Error'
try: # 判断字符串是否存在非数字
lis=[int(i) for i in lis]
except:
return 'Error'
for i in lis:
if i<0 or i>255: # 判断ip地址是否合法
return 'Error'
temp='0x' #记录16进制数
for i in lis:
a=hex(int(i))[2:].upper().rjust(2,'0') #转换为16进制
# if len(a)!=2:
# a='0'+a
temp+=a
return temp
s=list(map(str,input().split('.')))
print(change(s))
代码实现方案三:基础循环与异常处理
第三种解法:
l = input().split(".")
if len(l) != 4:
print("Error")
else:
s = ""
for i in l:
try:
num = int(i)
if num > 255 or num < 0:
print("Error")
s = ""
break
else:
s += hex(num)[2:].upper().rjust(2, "0")
except ValueError:
print("Error")
s = ""
break
if s:
print("0x" + s)
以上就是本文的全部内容,希望这些代码示例能对读者的学习有所帮助,也欢迎大家继续支持本站获取更多技术资源。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













