来自网络,联系侵删
80 字
1 分钟
【课外拓展题】信息编码1-二进制
第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, bdef 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/ 部分信息可能已经过时
相关文章 智能推荐
1
【课外拓展题】函数运用
Python 11.26:1、天数计算 2、打印圣诞树 3、矩阵乘法 4、验证哥德巴赫猜想 5、实现欧拉函数 6、推翻欧拉的猜想
2
【课外拓展题】Python列表
Python 11.22:1、 判断水仙花数 2、寻找自幂数 3、绘制钟形曲线 4、绘制大西洋中脊剖面轮廓 5、线性拟合。
3
【第五周作业-1】查找与排序
Python 第一关:顺序查找算法代码 第二关:折半查找算法代码 第三关:冒泡法算法代码 第四关:选择排序算法代码
4
【第三周作业-1】Python列表
Python 11.17:1、计算标准差 2、计算向量内积 3、查找学生信息。
5
【第五周作业-2】算法应用(穷举、递归、贪心)
Python 1、【穷举法】鸡兔同笼 2、【递归法】字符串反转 3、【贪心法】求最大值



























