源码:
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#次数更新为0 temp = list2[i] for j in list1: if j==temp: c=c+1 px=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))##结果保留六位小数
输出效果图: