在for循环中分离打印

2024-04-25 21:01:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个脚本,读取二进制形式的子网并将其转换为十进制。脚本需要输出以句点分隔的十进制结果(即输出如下:255.255.255.0)。你知道吗

我试图使用sep ="."来用句点分隔打印,但是,这似乎不起作用。我怀疑这可能是因为它每次都打印单独的输出,而不是将一个完整的语句连接在一起。我尝试过end= ".",但这不是一个选项,因为它会在输出的末尾添加一个额外的句点。你知道吗

下面是脚本的一个片段:

sub1 = "1111 1111.1111 1111.1111 1111.0000 0000"
octets = [sub1[0:9], sub1[10:19], sub1[20:29], sub1[30:39]]

for conversion in octets:
    print(int((conversion).replace(" ",""), 2), sep=".")

如何使打印输出与句点分开?你知道吗


Tags: in脚本for选项二进制语句octetssep
3条回答

如果IPv4地址以“01”字符串中的点/空格分隔的二进制数字给出:

binascii_ip = "1111 1111.1111 1111.1111 1111.0000 0000"

然后,您可以轻松地将ip作为Python中的对象:

>>> import ipaddress
>>> ipaddress.IPv4Address(int(binascii_ip.replace('.','').replace(' ',''), 2))
IPv4Address('255.255.255.0')

要只获取255.255.255.0,只需打印它。此代码将断言输入是有效的。你知道吗

如果您不需要验证输入,也不需要对其执行任何操作,只需打印它,那么简单的字符串操作就足够了:

>>> print(*[int(octet, 2) for octet in binascii_ip.replace(' ', '').split('.')],
...       sep='.')
255.255.255.0

替换所有空格一次,拆分'.'上的字符串以创建列表,然后在转换八位字节后使用.join重建字符串:

sub1 = "1111 1111.1111 1111.1111 1111.0000 0000"
octets = sub1.replace(' ', '').split('.')

print('.'.join(map(str, [int(i, 2) for i in octets])))
# 255.255.255.0

首先将八位字节转换为十进制,再将它们转换回字符串,然后使用'.'.join()连接字符串

>>> sub1 = "1111 1111.1111 1111.1111 1111.0000 0000"
>>> octets = [sub1[0:9], sub1[10:19], sub1[20:29], sub1[30:39]]
>>> '.'.join([str(int((el).replace(" ",""), 2)) for el in octets])
'255.255.255.0'
>>> 

相关问题 更多 >