题目描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
数据范围:保证输入的是合法的 IP 序列
输入描述:
输入
1 输入IP地址
2 输入10进制型的IP地址
输出描述:
输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址
题解
此题也主要是考察各进制之间的转换。
十进制转成二进制
bin()
二进制转成十进制
int(0b101,2)
十进制转成八进制
oc()
八进制转成十进制
int(0147,8)
十进制转成十六进制
hex()
十六进制转成十进制
int(0x1AFE,16)
还有就是rjust()函数的应用
以即dict.values()代表字典中所有键对应的值的列表。可以对其聚合。sum、max、min,agv等。
code
while 1:
try:
string=input()
if "." in string:
str10=""
list1=string.split(".")
for i in range(4):
list1[i]=bin(int(list1[i]))
list1[i]=str(list1[i].replace("0b",""))#10进制转成2进制后二进制数前面会带有0b
list1[i]=list1[i].rjust(8,"0")# 保持八位,用”0“在右边补齐8位
str10+=list1[i]
str10=str(int(str10,2))
print(str10)
else:
nums=int(string)
nums2=bin(nums)
str2=str(nums2)
str2=str2.replace("0b","")
str2=str2.rjust(32,"0")
list2=[]
for i in range(0,32,8):
a=str2[i:i+8]
a="0b"+a
a=int(a,2)
list2.append(a)
print(f"{list2[0]}.{list2[1]}.{list2[2]}.{list2[3]}")
except:
break