假设我有一个序列“ADFG” 脚本应该看它是否在列表中(A,T,G,C)然后如果是,从字典中获取密钥并添加1。 因此,对于序列“ADFG”,它将1加到变量“a”和变量“g”,并将2加到变量“error”。 但是,虽然脚本没有返回错误,但是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))
答案 0 :(得分:0)
你的意思是t,g,c不受dicio
这是正常的:字典没有采用变量的引用,只是复制了初始值。在向字典的值添加1时,您不会更新它们。
(a
是代码中的一个特例,它会在所有情况下都得到更新,但可能是一个错误,至少与其他代码相比并不合乎逻辑。)
要做你想做的事,你需要忘记你的t,g
...变量,只需使用dicio
来显示结果:
for i in ("A","T","G","C"):
print("{}={:.2f} %".format(i,dicio[i]/len(seq)*100))
(作为奖励,你将节省大量的复制/粘贴:))
BTW:如果你想初始化字典并保持按键排序,你需要ordereddict
:
from Collections import ordereddict
dicio = ordereddict()
for k in ("A","T","G","C"):
dicio[k] = 0
答案 1 :(得分:0)
我认为您正在尝试使用词典来存储值,而不是将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))