用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)
上一篇 2025年10月28日 下午1:01
下一篇 2025年10月28日 下午1:22


相关推荐

  • oracle创建数据库命令「建议收藏」

    oracle创建数据库命令「建议收藏」oracle创建数据库命令1.打开cmd连接系统默认数据库2.创建表空间CREATETABLESPACEDATADATAFILE‘D:\oracle\DATA\DATA.ORA’size10Gautoextendonnext1MMaxsizeunlimitedloggingextentmanagementlocalsegmentspacemanagementauto;3.创建临时空间CREATETEMPORARYTABLESPACEDATA_TE

    2026年2月18日
    6
  • Pytest(13)命令行参数–tb的使用

    Pytest(13)命令行参数–tb的使用前言pytest使用命令行执行用例的时候,有些用例执行失败的时候,屏幕上会出现一大堆的报错内容,不方便快速查看是哪些用例失败。–tb=style参数可以设置报错的时候回溯打印内容,可以设置参

    2022年7月29日
    8
  • 高斯消去法代码

    高斯消去法代码高斯消去法 c 代码顺序高斯列选主元 include lt cstdio gt include lt iostream gt include lt algorithm gt include lt cmath gt usingnamespa constintn 3 执行程序前手动改变方程数 voidgauss doublea n n

    2026年3月19日
    1
  • 弥合 n8n 中的 AI 上下文鸿沟:为何采用 MCP Gateway 构建更智能的工作流

    弥合 n8n 中的 AI 上下文鸿沟:为何采用 MCP Gateway 构建更智能的工作流

    2026年3月17日
    2
  • linux内存管理之 ION 内存管理器浅析Ⅱ(system contig heap)

    linux内存管理之 ION 内存管理器浅析Ⅱ(system contig heap)目录1systemcontigheap与systemheap2systemcontigheap创建3systemcontigheap内存分配4systemcontigheap内存释放1systemcontigheap与systemheap从代码中我们看到systemcontigheap与systemheap同属一个文件中,ion_system_heap.c相同点:它们都是根据用户传递的字节len,转换成order,从buddy中

    2025年8月13日
    4
  • 低噪放大器

    0引言在雷达射频接收系统中,对系统性能指标的要求越来越高,其中低噪声放大器是影响着整个接收系统的噪声指标的重要因素。与普通的放大器相比,低噪声放大器作用比较突出,一方面可以减少系统的杂波干扰,提高系统的灵敏度;另一方面可以放大系统的射频信号,保证系统正常工作。因此,低噪声放大器的性能制约着整个接收系统的性能,对整个接收系统性能的提高起了决定性的作用。因此,研制宽频带、高性能、更低噪声的放大器

    2022年4月6日
    72

发表回复

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

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