字典委员会

2024-09-28 03:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个序列“ADFG” 脚本应该查看它是否在列表(A,T,G,C)中,如果在列表中,则从字典中获取键并添加1。 因此,对于序列“ADFG”,它将向变量“a”和变量“g”加1,向变量“error”加2。 然而,虽然脚本没有返回错误,但是dicio[i]+=1行没有加上任何东西。。。。有什么想法吗? 我知道有更简单的方法,但我想用字典。你知道吗

seq= input ("dna seq:").upper()  
a,t,g,c,error=0,0,0,0,0
dicio= {"A":a,"T":t,"G":g,"C":c}
for i in seq:
    if i in ("A","T","G","C"):
        dicio[i]+=1
        a+=1
    else:
        error+=1

print("A={:.2f} %".format(a/len(seq)*100))
print("T={:.2f} %".format(t/len(seq)*100))
print("G={:.2f} %".format(g/len(seq)*100))
print("C={:.2f} %".format(c/len(seq)*100))
print("Da sequencia,{:.2f} % sao erros".format(error/len(seq)*100))

Tags: 方法in脚本format列表inputlen字典
2条回答

我认为您正在尝试使用字典来存储值,而不是让a,t,g,c连接到它并同时更新。下面是一些代码,它使用了一些字典功能,使其更加简洁:

seq= input ("dna seq:").upper()  
a,t,g,c,error=0,0,0,0,0
dicio= {"A":a,"T":t,"G":g,"C":c}
for i in seq:
    if i in dicio.keys():
        dicio[i]+=1
    else:
        error+=1

for key,value in dicio.items():
    print("{}={:.2f} %".format(key,value/len(seq)*100))

print("Da sequencia,{:.2f} % sao erros".format(error/len(seq)*100))

你的意思是t,g,c不受dicio的影响

这很正常:字典没有引用变量,只是复制了初始值。将1添加到字典的值时,不会更新它们。 (a是代码中的一个特殊情况,它在所有情况下都会更新,但可能是一个bug,至少与代码的其余部分相比不符合逻辑)。你知道吗

为了做你想做的事,你需要忘记你的t,g。。。变量,只需使用dicio显示结果:

for i in ("A","T","G","C"):
   print("{}={:.2f} %".format(i,dicio[i]/len(seq)*100))

(作为奖励,您将节省大量复制/粘贴:)

顺便说一句:如果您想初始化字典并保持键的顺序,您需要ordereddict

from Collections import ordereddict

dicio = ordereddict()
for k in ("A","T","G","C"):
   dicio[k] = 0

相关问题 更多 >

    热门问题