题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
''' 解题思路: 创建IP转整数的子函数ip_int()。 以及整数转IP的字函数int_ip()。 一、IP地址转整数: 输入的IP地址字符串按照逗号'.'为分割依据分割成数组, 然后遍历存储有IP地址4个段数字的数组, 先将其转换为整数后转换为2进制数, 2进制数再转换成字符串, 截取字符串除串首的'0b'外的所有字符, 将其与已完成转换的'01'2进制整数字符串相加, 最后在转换完成的'01'2进制字符串首加'0b'2进制标识, 在将其转换为可直接读取的序列(eval()函数实现)后转换为10进制整数。 二、整数转IP地址 ...... 需要注意中间需要大量的类型转换。 ''' def ip_int(ip):#将IP地址字符串转换为整数的子函数 out = ""#2进制整数字符变量 for i in ip.split("."):#依次读取IP地址4个位的整数字符 out = out + str(bin(int(i)))[2:].zfill(8)#将整数字符转换为2进制字符,并添记到2进制整数字符变量的末尾,每次记得补齐字符串成8位 return int(eval("0b" + out))#函数返回10进制的IP地址 def int_ip(ip):#将输入的整数转换为IP地址的子函数 bin_ip = str(bin(int(ip)))[2:].zfill(32)#将输入的整数字符转换为2进制'01'字符串,并补齐字符串位32位 s_ip = "" for i in range(0, 32, 8):#遍历2进制字符串序列,每次截取8位转换成整数 s_ip = s_ip + str(int(eval("0b"+bin_ip[i:i+8]))) + "."#当前截取的2进制字符串转换成整数字符后,在结尾添加分段字符.' return s_ip.strip(".")#取消右边多余的分段字符'.'后返回IP字符串 print(ip_int(input()))#将输入的IP地址转换成整数,并且打印输出 print(int_ip(input()))#将输入的整数转换成IP地址,并且打印输出
#华为机试#