用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PyCharm激活码永久有效PyCharm2021.3.3激活码教程-持续更新,一步到位[通俗易懂]

    PyCharm激活码永久有效PyCharm2021.3.3激活码教程-持续更新,一步到位[通俗易懂]PyCharm激活码永久有效2021.3.3激活码教程-Windows版永久激活-持续更新,Idea激活码2021.3.3成功激活

    2022年6月19日
    278
  • Redis和Memcached的区别

    Redis和Memcached的区别

    2022年2月11日
    32
  • 单调队列-原理详解(deque实现)[通俗易懂]

    单调队列-原理详解(deque实现)[通俗易懂]一、单调队列的概念:单调队列,即单调递减或单调递增的队列。二、单调队列的性质:1.队列中的元素在原来的列表中的位置是由前往后的(随着循环顺序入队)。2.队列中元素的大小是单调递增或递减的。三、单调队列的特点:从队尾入列,队首或队尾出列。四、例题分析:那么单调队列用什么用呢?单调队列一般用于求区间内的最值问题。看几道题,理解上述内容:1.洛谷P1886…

    2022年6月25日
    32
  • SysUtils.QuotedStr – 加单引号

    SysUtils.QuotedStr – 加单引号举例:varss,s:string;beginss:=’Delphi’;s:=QuotedStr(ss);ShowMessage(s);{‘Delphi’}end;SysUtils单元下的公用函数目录

    2022年10月18日
    1
  • java多线程–同步锁、

    java多线程–同步锁、同步代码块:语法:synchronized(同步锁){     需要同步操作的代码}—————————————————同步锁:为了保证每个线程都能正常执行原子操作,Java引入了线程同步机制.同步监听对象/同步锁/同步监听器/互斥锁:对象的同步锁只是一个概念,可以想象为在对象上标记了一个锁….

    2022年6月13日
    28
  • 表单提交原理_防止表单重复提交

    表单提交原理_防止表单重复提交1.HTTP是如何提交表单的标签的属性enctype设置以何种编码方式提交表单数据。可选的值有三个:  application/x-www-form-urlencoded:这是默认的编码方式。它只处理表单域里的value属性值,采用这种变法方式的表单会将表单域的值处理成URL方式。  multipart/form-data: 这种编码方式会以二进制流的方式来处理表单数据,这中

    2022年10月6日
    3

发表回复

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

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