用python写海明校验码

用python写海明校验码生成海明校验码 defInput 输入字符串 0 与 1 的组合输出两个参数 字符串的长度 字符列表 string input 请输入 0 1 字符串 returnlen string list string n 表示字符串长度 List 表示字符列表 List gt type List 0 stringn List Input defgetK n par

生成海明校验码

def Input(): """ 输入字符串'0'与'1'的组合 输出两个参数:字符串的长度,字符列表 """ string = input("请输入‘0’‘1’字符串:") return len(string), list(string) # n表示字符串长度,List表示字符列表。List --> type(List[0])=string n, List = Input() def getK(n): """ param: n表示字符串长度 function:计算得到k的值,k为海明码检验位 return:返回参数k """ k = 1 while n+k > pow(2, k)-1: k += 1 return k # k为海明码检验位 k = getK(n) def getHList(n, k, List): """ param:n表示字符串长度,k表示海明码校验位,List表示'0' '1'字符列表 function:初始化列表H,将List里的字符按照规律插入H列表中,未插入的位置则是校验码的位置,初始值为-1 return:返回已经初始化列表H。H --> type(H[0])=int """ H = [-1 for i in range(k+n+1)] cnt = 0 for i in range(1, k+n+1): if i == pow(2, cnt): cnt += 1 continue H[i] = int(List.pop()) return H # 初始化列表H。H --> type(H[0])=int H = getHList(n, k, List.copy()) def getPDict(k, H): """ param: k表示海明码校验位,H表示初始化列表 function: 计算校验码的值 return: 返回字典P,键确定索引位置,值是计算出来的校验码 """ P = dict() for i in range(k): P[i] = None cnt = 0 for bi in range(1, len(H)): if bi == pow(2, cnt): cnt += 1 continue if (bi >> i)&1: if not P[i]: P[i] = H[bi] else: P[i] = P[i]^H[bi] return P # 字典P,在pow(2, key)的H索引位置上插入value P = getPDict(k, H) def insertPInH(P, H): """ param: 字典P,存储了校验码的值。初始化列表H,待插入P的值。 function:按照一定规律将P中的值插入H中 return: 返回列表H """ for key in P: Index = pow(2, key) H[Index] = P[key] return H # H1 表示已经处理好的海明校验码 H1 = insertPInH(P, H.copy()) 

输入字符串:

海明码的校验

[-1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1]

然后将这个数据进行checking,检查是否出错。

def checking(Hs, k): """ param: Hs表示传输过来的字符串,用于验证。k表示校验位数。 function: 用来校验传输的字符串是否出错 """ # Pc得到Pi校验码 Pc = getPDict(k, Hs) print(Pc) Si = [] Svalue = 0 cnt = 0 for i in range(1, len(Hs)): if i == pow(2, cnt): Pi = Pc[cnt] value = Pi^Hs[i] Si.append(value) if value == 0 and cnt == 0: Svalue = 0 else: Svalue += pow(2*value, cnt) cnt += 1 if cnt == k: break print(Si) if Svalue: print("传输错误,错误的索引位置为:", Svalue) print("从下标0开始索引") else: print("传输无误!") checking([-1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1], k) 

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232171.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat激活码mac【2021免费激活】

    (navicat激活码mac)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    463
  • sqlserver2000数据库置疑_sql2008数据库置疑

    sqlserver2000数据库置疑_sql2008数据库置疑解决由于sql2000日志文件引起的“置疑”。日志有错误——–重新附加提示日志有错误。日志文件丢失—–丢失了.ldf文件,只有.mdf文件的数据库重建。 步骤:一、备份“置疑”数据库的数据文件,因为日志文件.ldf出错,可以只备份.mdf文件。 二、打开企业管理器(SQL Server Enterprise Manager),删除“置疑”数据库,如果提示删除错误,可以重启数据库服务…

    2022年8月20日
    7
  • python 字典最外层使用_python字典底层实现

    python 字典最外层使用_python字典底层实现前言问题1:python中的字典到底是有序还是无序问题2:python中字典的效率如何python字典底层原理在Python3.5以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插

    2022年7月31日
    7
  • strictmode android,Android StrictMode使用「建议收藏」

    strictmode android,Android StrictMode使用「建议收藏」StrictMode是Android提供的一个开发工具,用于检测一些异常的操作,以便开发者进行修复。StrictMode可以监控以下问题,不应该在应用主线程中完成的工作,包括磁盘读写、网络访问等。内存泄露,包括Activity泄露、SQLite泄露、未正确释放的对象等。使能StrictMode通常在Application和Activity的开始处(如onCreate)添加代码使能StrictMod…

    2022年5月2日
    101
  • ubuntu中文输入法_ubuntu如何设置中文输入法

    ubuntu中文输入法_ubuntu如何设置中文输入法在Ubtuntu12.10中自带了中文输入法,可通过Ctrl+Space进行输入法到切换,在英文系统中同样已经预装了ibus,只需要下载一下简体中文语言包即可。如何安装简体中文语言包?依次选择SytemSetting–>LanguageSupport–>Install/RemoveLanguages后,将出现如下图所示窗口:将右侧Installed栏的选择框勾…

    2022年9月26日
    3
  • 判断一个数是否为素数的代码(判断10000以内的数是不是素数)

    素数(也叫质数)的数学定义为:大于1的自然数中除了1和它本身外没有其他因数的整数,常见的素数有:2,3,5,7,11,13……等,判断一个数是不是素数经常作为考试题目。先了解一下算法:设i=2,n为需要判断的数。 计算n/i 如果n/i的余数为0,则输出:n不是素数 如果n/i的余数不为0,则令i=i+1,如果此时i<n,则返回第2步,否则输出:n是素数。算法流程图:…

    2022年4月18日
    110

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号