输入一串字符,判断该字符串是否为点分十进制的IP地址,若是则转换为16进制输出,否则输出“Error”

注意:输入可能是任意的一个字符串,比如“abc.bas.fefe.4r4”或者“23.23.11.23.123”
这都是不合法的IP地址

例如

输入:192.41.6.20

输出:0xC0290614

输入:257.32.23.1

输出:Error
解1

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')

解2:

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))

解3

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)