源码:
import string import math count=0#用counnt保存不同的符号的个数 print("请输入你想计算信源熵的信息:") n = input() sum_num=len(n)#字符的总个数#用list2保存不同的符号数 list1 = [] list2 = [] for i in n:list1.append(i) for i in list1:if not i in list2:list2.append(i)count=count+1#统计不同符号出现的次数及概率 P=[]#存放概率 for i in range(0,count):c = 0#次数更新为0temp = list2[i]for j in list1:if j==temp:c=c+1px=c/(sum_num)P.append(px)print("经统计,您发送的消息中一共有{}个符号,其中有{}种不重复的符号".format(sum_num,count)) print("接下来向您展示这些符号的概率") for i in range(0,count):print("P({})=".format(list2[i]),end='')print("%.8f"%(P[i])) #计算信源熵 sum=0 print("\n根据熵的计算公式H=-∑{p(x)*log[p(x)]}可知,该信息的信源熵H=",end='') for i in range(0,count):temp = math.log(P[i],2)temp1 = temp*P[i]sum = sum+temp1 output=0-sum print("%.6f"%(output))##结果保留六位小数
输出效果图: