-1

我已经写了这个函数,但我不断收到断言错误,我不知道为什么???

  def amino(codonfile, DNA):
        """This function reads the 64-line codon file and then converts the DNA string entered into an amino acid string."""
        codonfile = []
        for line in codonfile:
            x,y = line.split()
            if DNA == dict[x]:
                return dict[y]
    codonfile = open("codon.txt","r")   
    codonfile.close

    assert(amino("codon.txt","TTT")== "Phe")
    assert(amino("codon.txt","TTATTCTTGTCT")== "LeuPheLeuSer")
    assert(amino("codon.txt","TTAGGGCCCTAC")== "LueGlyProTyr")
    print("passed")
4

2 回答 2

5

您的代码是专利废话,并且总是会返回None.

您忽略了打开的文件,将文件名传递给您的函数,然后将替换为一个空列表,因此您最终会遍历该空列表并且不会产生任何结果。

最后,您的每个assert语句都会将结果 ( None) 与一个字符串进行比较,该字符串永远不会匹配,因此会失败。

于 2012-11-05T18:11:25.330 回答
4

我假设您正在尝试解决与您之前的问题中列出的相同的问题。这次包括你的代码做得很好。

这是您的代码的一些问题。

def amino(codonfile, DNA):
    """This function reads the 64-line codon file and then converts the DNA string entered into an amino acid string."""
    codonfile = []
    for line in codonfile:

codonfile作为 的参数提供amino,但您立即用空列表覆盖它!因为codonfile是一个空列表,所以没有什么可以迭代的。您的 for 循环循环零次。而是这样做:

def amino(codonfile, DNA):
    with open(codonfile, 'r') as f:  # opens the file and assigns to f
        for line in f:

现在,你的 for 循环内部也很混乱。

    for line in codonfile:
        x,y = line.split()
        if DNA == dict[x]:
            return dict[y]

此时没有字典命名dict。(但有一个内置dict类型,所以不要使用该名称)。相反,您需要用codonfile. 在您的 for 循环之前,您需要创建一个字典来保存这些项目。像这样做:

codon_table = {} # brackets for an empty dictionary
for line in f:
    x, y = line.split()
    codon_table[x] = y  

最后一点是使用codon_table来翻译 DNA 字符串。您需要将其DNA分成 3 个字母并从codon_table. 然后你需要将这些翻译加入一个字符串并返回它。

我把最后一段作为练习留了下来。试一试,如果您无法获得它,请将您尝试过的内容作为另一个问题发布。

于 2012-11-05T18:26:45.570 回答