Python 将IP地址字符串转换为整数

Python 将IP地址字符串转换为整数,python,Python,我是python新手,正在寻求关于我的家庭作业提示的帮助 下面是这位教授的确切提示: 两者 起始ip和结束ip应为12位整数。那就是做IP 查找更容易。首先按句点拆分ip地址,然后为每个数字添加前导零 将每个字符串设为三位数,即字符串102.1.2.0变为整数 102001002000提示:使用字符串zfill方法进行零填充,并按如下方式执行操作 strings来构建一个数字字符串,并且仅在整数值结束后转换为int 请注意,当转换为int时,第一个数字的前导零将 丢失,因为int没有前导零-这没

我是python新手,正在寻求关于我的家庭作业提示的帮助

下面是这位教授的确切提示:

两者 起始ip和结束ip应为12位整数。那就是做IP 查找更容易。首先按句点拆分ip地址,然后为每个数字添加前导零 将每个字符串设为三位数,即字符串102.1.2.0变为整数 102001002000提示:使用字符串zfill方法进行零填充,并按如下方式执行操作 strings来构建一个数字字符串,并且仅在整数值结束后转换为int 请注意,当转换为int时,第一个数字的前导零将 丢失,因为int没有前导零-这没关系

因此,基本上我们从ip字符串中删除点,将字符串重新格式化为12个字符长,然后将其转换为int

例如: 0.0.0.0应转到->000.000.000.000 102.1.2.0应转至->102001002000

这是我想到的,但似乎不起作用:

def ip_to_int(ip):
ip = ip.split('.')
ip = ip[0].__str__() + ip[1].__str__() + ip[2].__str__() + ip[3].__str__()
ip = ip.zfill(12)
return int(ip)
例如,当我将IP0.0.0.0插入此代码时,它返回int 0。 当我输入1.0.0.0,结果是1000。我无法准确指出为什么会发生这种情况

就像我说的,我是python新手,所以我所做的一些事情可能并不完全有意义


提前感谢。

教授关于zfill的要求是:

ip =  ip[0].__str__().zfill(3) 
    + ip[1].__str__().zfill(3) 
    + ip[2].__str__().zfill(3) 
    + ip[3].__str__().zfill(3)
但是请注意,您的列表已经包含字符串,因此您不需要再次转换这些字符串,那么您的代码将是:

ip =   ip[0].zfill(3) 
     + ip[1].zfill(3) 
     + ip[2].zfill(3) 
     + ip[3].zfill(3)
为了让它更优雅、更像蟒蛇,你可以:

ip = ''.join([i.zfill(3) for i in ip])
您可以尝试以下方法:

int(''.join([i.zfill(3) for i in ip.split(".")]))
解释如下:

首先,我们将ip字符串拆分为几个部分:

     ip.split('.')
然后我们创建一个列表,将每个部分填充到长度为3的字符串中:


接下来我们将它们合并。合并并将结果字符串转换为整数int。

按照您当前解决问题的方式,将字符串102.1.2.0,然后将其拆分为一个数组[102,1,2,0],然后将字符串合并为102120,然后用零填充。102120你现在看到答案了吗

试着先自己解决它,然后看看这是否是你想出的答案

您需要先填充每个字符串,然后再将它们组合在一起。您可以一直键入它,strip[0]。zfill3+strip[1]。zfill3+。。。但是,如果你的教授已经复习了for循环,那么使用for循环是更好的编码实践。尝试范围4中的i:result=result+strip.zfill3

很晚了,但是:

def ip_to_int(ip):
    m = ''
    for i in ip.split('.'):
        m += (3-len(i))*'0' + i
    return int(m)

您应该说明它为什么不起作用,即结果是什么您认为ip.zfill12在做什么?而且ip[0]已经是一个字符串,不需要调用:ip[0]。u str_uuuuuuuuuuuuuuuuuo和etcnote,当转换为int时,第一个数字的前导零将丢失,因为int没有前导零-这是可以的,因此0.0.0应该是0,对吗?根据他的解释,0.0.0.0应该是000000000000。因为我们想用0填充所有12个字符。你为什么要打电话。\uuu str\uuu?@alfasin这是在原始代码中,我也不会这么做。@JosepValls如果你不这样做,那么改变你的答案来反映它。这解决了一些问题。但是,某些IP地址的格式仍然没有设置为12个字符。@andrewDev15还记得我上面的评论吗:注意,当转换为int时,第一个数字的前导零将丢失,因为int没有前导零–这是正确的,因此是有效的。请看,您的答案是他们其中一个选项的重复。
     [n.zfill(3) for n in ip.split('.')]
def ip_to_int(ip):
    m = ''
    for i in ip.split('.'):
        m += (3-len(i))*'0' + i
    return int(m)