计算基因序列的复杂度

img


图中远行程序是在计算pi的值时报错了,不知道怎么改。是不是那个对字典d的赋值出现了错误,我想要的是一个字符出现的次数作为d的值,但是num好像是总的数,所以一个字符出现的次数要怎么统计呢?

首先不说你答案的对错, 就你个代码里面就写错了, 字典的key是c ,而不是'c' , 前者是变量, 后者是常量字符;
其次, 键值是c出现的次数, 而不是num, 即使是,你也写错了,要写也要写成num, 而不是'num' ,还是那句话,前者是变量, 后者是常量字符;

看你右边图片,题目描述, 我帮你修改了一下代码如下;

import math

s = "ATae34ATGGATGGTGTTT2CT8CTG"
# 控制台执行代码请取消下行注释, 同时注释掉上一行
# s=input("请输入碱基链字符串:")

d = {}

num = 0

for c in s:
    # 判断字母是否中AGTC中
    if c in "ATGC":
        # 如是+1
        num += 1
        # 统计c出现的次数存储到字典中key为c的键值中
        d[c] = s.count(c)

print(f"四种碱基出现频率为:{d}")
entropy = 0

for i in d.values():

    pi = int(i) / num
    entropy += pi * math.log2(pi)

entropy = -entropy

print("序列复杂度为: {:.2f}".format(entropy))
四种碱基出现频率为:{'A': 3, 'T': 9, 'G': 6, 'C': 2}
序列复杂度为: 1.78