Python入门习题(70)——OpenJudge百练习题:IP地址转换

OpenJudge百练第4039号习题:IP地址转换

题目描述

来源
OpenJudge网站百练习题集-第4039号习题

要求
总时间限制: 1000ms 内存限制: 65536kB

描述
IP地址总是由4个0-255的数字以"."隔开的形式来显示给用户,例如192.168.0.1。在计算机中,一个IP地址用4字节来依次存储其从右到左的4个数字部分,每个字节(8比特)以2进制的形式存储相应的IP地址数字,请你实现一个从IP地址的显示格式到计算机存储格式的转换。

输入
每行输入一个IP地址,如果输入为-1,结束输入
输出
每行输出一个IP地址在计算机存储中以二进制表示的4字节内容
样例输入
192.168.0.1
255.255.0.0
1.0.0.1
-1
样例输出

11000000101010000000000000000001
11111111111111110000000000000000
00000001000000000000000000000001

解题思路

  1. 对于每一个ip地址,解析出4个整数,从左到右依次把4个整数转换为二进制字符串,输出该二进制串。
  2. 题目描述中讲到,“一个IP地址用4字节来依次存储其从右到左的4个数字部分”,但样例输出中没有从右到左存储4个数字。
  3. 把一个整数转换为二进制字符串,可以用bin()函数。bin(1)得到’0b1’, bin(5)得到’0b101’,注意前缀有’0b’。

参考答案

while True:
    ip_addr = input().strip()
    if ip_addr == "-1":
        break

    ip_ints = [int(s) for s in ip_addr.split('.')]
    ip_bin = ''  #4位整数的二进制串
    for n in ip_ints:
        n_bin = bin(n)[2:]  #bin(5)得到'0b101',前缀有'0b'
        n_bin = '0' * (8 - len(n_bin)) + n_bin  #左侧用0补充
        ip_bin += n_bin
    print(ip_bin)

测试用例

  1. 题目描述给出的测试用例已经覆盖了整数为0, 1, 255,以及中间数字的情形。
  2. 4个整数都为0的情形。
    样例输入
    0.0.0.0
    -1
    样例输出
    00000000000000000000000000000000
    (32个0,够难数。)
  3. 好数一点的情形。
    样例输入
    255.0.255.0
    -1
    样例输出
    11111111000000001111111100000000

小结

  1. 利用bin函数,简便地从整数转换为二进制字符串。如果自己编写代码实现这一转换,要费劲多了。
  2. 事先不知道bin函数该怎么办?我是在搜索引擎上输入“python 整数转换为二进制”,就得到线索了——Python 二进制、整数相互转化一文介绍了十进制与二进制相互转换的方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值