我写了这个函数,但我一直得到断言错误,我不知道为什么???
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")
答案 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
获取翻译。然后,您需要将这些翻译加入单个字符串并返回。
我把最后一段未实现作为练习。试一试,如果你不能把它作为另一个问题发布。