mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
80 字
1 分钟
【课外拓展题】信息编码1-二进制
2025-12-04

第1关:前苏联的黑科技#

########## Begin ##########
def DecToTer_int(d):
t = ''
if d<0:
d=-d
while d>0:
t=str(d%3)+t
d=d//3
t = '-' + t
elif d==0:
t=0
else:
while d>0:
t=str(d%3)+t
d=d//3
return t
########## End ##########
d = int(input()) #十进制整数
t = DecToTer_int(d) #转换成三进制
print('%s -> %s' % (d, t))

·第2关:乘二取整#

########## Begin ##########
def DecToBin_point(d):
b = ''
while d%1!=0 and len(b)<8:
d=d*2
b=b+str(int(d))
d=d-int(d)
b = '0.' + b
return b
########## End ##########
d = float(input()) #十进制纯小数
b = DecToBin_point(d) #转换成二进制
print('%s -> %s' % (d, b))

第3关:二进制到十进制#

########## Begin ##########
def BinToDec(b):
if '.' not in b:
b = b + '.'
int_value = 0
float_value = 0
int_part,float_part = b.split('.')
for i in range(len(int_part)):
int_value += int(int_part[i]) * 2**(len(int_part)-1-i)
for i in range(len(float_part)):
float_value += int(float_part[i]) * 2**-(i+1)
d = int_value + float_value
return d
########## End ##########
b = input()
d = BinToDec(b)
print('%s -> %s' % (b, d))

第4关:二进制到十六进制#

########## Begin ##########
def BinToHex(b):
L = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
if len(b) % 4 != 0:
b = '0' * (4 - len(b) % 4) + b
h = ''
for i in range(0, len(b), 4):
dec = 0
for j in range(4):
if b[i + j] == '1':
dec += 2 ** (3 - j)
h += L[dec]
return h
########## End ##########
b = input()
h = BinToHex(b)
print('%s -> %s' % (b, h))

第5关:二进制计量单位#

########## Begin ##########
def unit_convert(a):
if a<1024**2:
b = str(round(a/1024,1))+'K'
elif a<1024**3:
b = str(round(a/1024**2,1))+'M'
elif a<1024**4:
b = str(round(a/1024**3,1))+'G'
else:
b = str(round(a/1024**4,1))+'T'
return b
########## End ##########
a = int(input())
b = unit_convert(a)
print('%s = %s' % (a, b))

第6关:逻辑运算#

########## Begin ##########
def AND(a,b):
bit1,bit2=a,b
res=''
for i in range(len(bit1)):
if bit1[i]=='1' and bit2[i]=='1':
res+='1'
else:
res+='0'
return res
def OR(a,b):
bit1,bit2=a,b
res=''
for i in range(len(bit1)):
if bit1[i]=='0' and bit2[i]=='0':
res+='0'
else:
res+='1'
return res
def NOT(a):
res=''
for i in range(len(a)):
if a[i]=='0':
res+='1'
else:
res+='0'
return res
def XOR(a,b):
bit1,bit2=a,b
res=''
for i in range(len(bit1)):
if bit1[i]==bit2[i]:
res+='0'
else:
res+='1'
return res
########## End ##########
a = input()
b = input()
print('%s %s %s = %s' % (a, 'and', b, AND(a,b)))
print('%s %s %s = %s' % (a, 'or' , b, OR(a,b)))
print('%s %s = %s' % ( 'not', a, NOT(a)))
print('%s %s %s = %s' % (a, 'xor', b, XOR(a,b)))

第7关:二进制加法#

########## Begin ##########
def duiqi(a,b):
lena = len(a)
lenb = len(b)
if lena > lenb:
b = '0' * (lena - lenb) + b
else:
a = '0' * (lenb - lena) + a
return a, b
def add(a,b):
a,b=duiqi(a,b)
jinwei=0
result=''
for i in range(len(a)-1,-1,-1):
wei=int(a[i])+int(b[i])+jinwei
result=str(wei%2)+result
jinwei=wei//2
if jinwei:
result='1'+result
return result
########## End ##########
a = input()
b = input()
print('%s + %s = %s' % (a, b, add(a, b)))

第8关:解析IP地址#

########## Begin ##########
def parseIP(ip, mask):
a,b = fun(ip,mask)
c = AND(a,b)
d = AND(a,NOT(b))
netID = '.'.join(BinToDec(c))
hostID = '.'.join(BinToDec(d))
return netID,hostID
def BinToDec(b):
int_value = 0
int_part = b.split(' ')
result = []
for part in int_part:
if not part:
continue
for j in range(len(part)):
int_value += int(part[j]) * 2**(len(part)-1-j)
result.append(str(int_value))
int_value = 0
return result
def fun(ip,mask):
ip = ip.split('.')
mask = mask.split('.')
t1 = ''
t2 = ''
for i in range(4):
d = int(ip[i])
binary_part = ''
for i in range(8):
binary_part = str(d%2) + binary_part
d = d//2
t1 = t1 + binary_part + ' '
for i in range(4):
d = int(mask[i])
binary_part = ''
for i in range(8):
binary_part = str(d%2) + binary_part
d = d//2
t2 = t2 + binary_part + ' '
return t1,t2
def AND(a,b):
res=''
for bit1, bit2 in zip(a, b):
if bit1 == ' ':
res += ' '
continue
if bit1 == '1' and bit2 == '1':
res += '1'
else:
res += '0'
return res
def NOT(a):
res=''
for bit in a:
if bit == ' ':
res += ' '
continue
if bit == '0':
res += '1'
else:
res += '0'
return res
########## End ##########
ip = input() #IP地址
mask = input() #子网掩码
netID, hostID = parseIP(ip, mask)
print('网络号:', netID) #网络号
print('主机号:', hostID) #主机号
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

【课外拓展题】信息编码1-二进制
https://blog.sherry.qzz.io/posts/python/1204imfor/
作者
Sherry
发布于
2025-12-04
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录