(Python)IP地址转换

‘’仅个人学习过程中的笔记与记录‘’

IP地址转换

题目描述:

IP 地址是32 位的二进制字符串,输入一个合法的二进制表示的IP 地址,

请将其转换为用“.”分隔开的4 个十进制数组成十进制格式输出(输出格式:204.148.21.114)。

【样例输入】

11001100100101000001010101110010

【样例输出】

204.148.21.114

 

解1:

思考:

IP地址为32位二进制字符串,转换为十进制为固定的四个十进制数,即每八位进行进制转换,设想:

构建4次循环通过 和 运算符对输入内容依次进行分割,用int(num,2)将二进制转换为十进制再用方法str.append()把分割的元素依次再追加到s[]字符串内

代码如下:

复制代码
def ip(num):    #构建ip函数
    s = []
    for i in range (4):
        a = num % 10000000  
        s.append(str(int(a),2)) #将转换后的十进制转换为字符形式
        num /= 10000000
    return '.'. join (s [:: -1]) #在每个字符(除最后一个)之间添加“.”
                                 #s[::-1]操作为将其逆排序
a = ip(input ())
print(a)    
复制代码

运行结果:

TypeError: not all arguments converted during string formatting

度娘一下了解到:

”% 操作符只能直接用于字符串(‘123’),列表([1,2,3])、元组,因此需要一一匹配操作符。“

即%和后面的参数数量不对应...研究了半天改了几次代码都是各种错误,查询其他大佬的解决方案,有的又用了还没学习到的命令,且行数略有一点多...

目前初学中的初学水平实在没办法解决这个方案的问题,留在这里等以后来解答。

 

后又看见了不少大佬的博客,发现了一个最为简单的方法:

 

解2:

思考:

直接将字符串进行切片,再通过int转换进制,更改结尾命令,五行代码就解决。

代码如下:

ip = input()
print(int(ip[0:8],2),end='.')
print(int(ip[8:16],2),end='.')
print(int(ip[16:24],2),end='.')
print(int(ip[24:32],2),end='')

运行结果与示例一致。

该代码实在简短有效且粗暴,感觉自己智商被侮辱,谨记。

但是依然希望通过之后的学习能回来完美解决第一种想法的问题。

 

 

 

感谢下面几位大佬的博客以进行参考:

python整数与IP地址转换_Python热爱者的博客-CSDN博客_python创建一个从整数到ip地址的转换函数

Python学习笔记:TypeError: not all arguments converted during string formatting_Big_quant的博客-CSDN博客_argument converted

Python3 合法IP地址转换 - 犬饲Atsuhiro - 博客园 (cnblogs.com)

 

 

 
posted @   蜗牛诶  阅读(2531)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示