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 二进制、整数相互转化一文介绍了十进制与二进制相互转换的方法。

你可能感兴趣的:(Python入门100道习题,Python编程)