我在帮我女朋友布置作业。这个任务的一部分是计算包含某些通配符的DNA序列中可能的组合数。在
我使用以下python脚本:
from Bio import Seq
from Bio import SeqIO
short = SeqIO.parse('short.fasta', 'fasta')
long = SeqIO.parse('long.fasta', 'fasta')
# IUPAC dictionary
IUPAC = {
'R': 2,
'Y': 2,
'S': 2,
'W': 2,
'K': 2,
'M': 2,
'B': 3,
'D': 3,
'H': 3,
'V': 3,
'N': 4
}
# Define method to count number of possible sequences
def pos_seq(seqs):
d = {}
for record in seqs:
pos = 1
name = record.id
seq = record.seq
for ltr in seq:
if ltr in IUPAC.keys():
pos = pos * IUPAC[ltr]
d.update({name : pos})
print(name + ": " + str(pos) + " possibilities")
print("")
print("end of file")
print("")
return d
print(pos_seq(short))
print(pos_seq(long))
函数pos_seq
接受一组序列,并返回每个序列的可能性数。在
脚本运行良好,函数会在每次迭代中打印正确的答案。但是,我想将序列的名称和可能的数量保存到字典中并返回它。在
问题是:它总是返回一个空字典(在方法开头定义)。在
全局定义字典(在函数之外)是有效的;字典确实得到了正确的更新,所以问题可能是我在函数中定义了字典。也许我需要更改.update
行来指定我要更新的字典不是全局字典吗?在
说来话长问一个简单的问题:我似乎不能使用函数来创建字典,更新几次然后返回它。它是空的。在
我对Python不是很有经验,但我在网上找不到这个问题的答案。在
谢谢你的帮助!在
在对jez提出的令人费解的问题(尽管存在缩进错误,但没有出现缩进错误)进行了一点研究之后,我发现了代码工作的原因。在
你用8个空格和制表符不一致地缩进。这在Python2中是允许的,但在Python3中是不允许的。http://python3porting.com/differences.html#indentation
因此,如果您尝试以下代码:
它在Python2中可以工作,但在Python3中会出现缩进错误。在
关于StackOverflow的另一个值得注意的问题是,当你粘贴带有缩进的代码时,它在显示时会显示为4个空格,但是当你进入编辑模式时,你可以复制并粘贴标签(试试看)。在
这就是为什么,即使仍然有错误,代码也不能工作。在
相关问题 更多 >
编程相关推荐