我对python很新,并在我的作业提示上寻求帮助。
以下是教授的确切提示:
这两个 start_ip和end_ip应为12位整数。那就是制作IP 查找更容易。首先在句点分割IP地址,然后为每个数字添加前导零 使它们中的每一个都是三位数,即字符串102.1.2.0变为整数 102001002000.提示:使用字符串zfill()方法(零填充)并执行操作 用于构建数字字符串的字符串,仅在整数后才转换为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)
例如,当我将ip 0.0.0.0插入此代码时,它返回int 0。 当我输入1.0.0.0时,它会产生1,000。我无法确定为什么会发生这种情况。
就像我说我是python的新手所以我所做的一些可能并不完全合理。
提前致谢。
答案 0 :(得分:4)
教授对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)
并使其更加优雅和pythonic你可以做:
ip = ''.join([i.zfill(3) for i in ip])
答案 1 :(得分:1)
你可以试试这个:
int(''.join([i.zfill(3) for i in ip.split(".")]))
答案 2 :(得分:1)
def ip_to_int(ip):
return int("".join([n.zfill(3) for n in ip.split('.')]))
解释:
首先,我们将ip
字符串拆分为部分:
ip.split('.')
然后我们创建一个列表,将每个部分填充到长度为3
的字符串:
[n.zfill(3) for n in ip.split('.')]
接下来我们加入它们("".join()
)并将结果字符串转换为整数(int()
)。
答案 3 :(得分:1)
您目前正在解决此问题的方法,您将字符串"102.1.2.0"
,然后将其拆分为数组["102", "1","2","0"]
,然后将字符串放在一起"102120"
,然后填充零。 000000102120
。你现在看到了答案吗?
首先尝试自己解决,然后看看这是否是你想出的答案。
在将每个字符串放在一起之前,您需要
zfill(3)
。您可以一直输入str(ip[0]).zfill(3) + str(ip[1]).zfill(3) + ...
,但如果您的教授已经超越了那些,那么使用for
循环是更好的编码习惯。试试for i in range(4): result = result + str(ip).zfill(3)
答案 4 :(得分:1)
现在已经很晚了,但是:
def ip_to_int(ip):
m = ''
for i in ip.split('.'):
m += (3-len(i))*'0' + i
return int(m)