断言错误:?

时间:2012-11-05 18:06:16

标签: python

我写了这个函数,但我一直得到断言错误,我不知道为什么???

  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")

2 个答案:

答案 0 :(得分:5)

您的代码是专利无用的,并且始终会返回None

您忽略了打开的文件,将文件名传递给您的函数,然后将那个替换为空列表,这样您最终会循环遍历该空列表而不会产生任何结果。

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

答案 1 :(得分:4)

我假设您正在尝试解决your prior question中列出的问题。干得好,包括你的代码。

以下是您的代码存在的一些问题。

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获取翻译。然后,您需要将这些翻译加入单个字符串并返回。

我把最后一段未实现作为练习。试一试,如果你不能把它作为另一个问题发布。