[英]RNA to Protein simulation program's TypeErorr?
這是我在做什么:
def dna_complement(dna):
coup = ""
for letter in dna:
if letter == "C":
coup += "G"
if letter == "G":
coup += "C"
if letter == "A":
coup += "T"
if letter == "T":
coup += "A"
return coup
def convert_to_rna(dna):
coup2 = ""
for letter in dna:
if letter == "C":
coup2 += "G"
if letter == "G":
coup2 += "C"
if letter == "A":
coup2 += "U"
if letter == "T":
coup2 += "A"
return coup2
def translate(rna):
amino_acid = ""
for len in rna:
if range(0, len(rna), 3) == "UUU" :
amino_acid = CODON_TABLE.get("UUU")
if range(0, len(rna), 3) == "UUC" :
amino_acid = CODON_TABLE.get("UUC")
if range(0, len(rna), 3) == "UUA" :
amino_acid = CODON_TABLE.get("UUA")
CODON_TABLE = {'UUU':'Phe','UUC':'Phe','UUA':'Leu','UUG':'Leu','CUU':'Leu','CUC':'Leu','CUA':'Leu','CUG':'Leu','AUU':'Ile','AUC':'Ile','AUA':'Ile','AUG':'Met','GUU':'Val','GUC':'Val','GUA':'Val','GUG':'Val','UCU':'Ser','UCC':'Ser','UCA':'Ser','UCG':'Ser','CCU':'Pro','CCC':'Pro','CCA':'Pro','CCG':'Pro','ACU':'Thr','ACC':'Thr','ACA':'Thr','ACG':'Thr','GCU':'Ala','GCC':'Ala','GCA':'Ala','GCG':'Ala','UAU':'Tyr','UAC':'Tyr','UAA':'STOP','UAG':'STOP','CAU':'His','CAC':'His','CAA':'Gln','CAG':'Gln','AAU':'Asn','AAC':'Asn','AAA':'Lys','AAG':'Lys','GAU':'Asp','GAC':'Asp','GAA':'Glu','GAG':'Glu','UGU':'Cys','UGC':'Cys','UGA':'STOP','UGG':'Trp','CGU':'Arg','CGC':'Arg','CGA':'Arg','CGG':'Arg','AGU':'Ser','AGC':'Ser','AGA':'Arg','AGG':'Arg','GGU':'Gly','GGC':'Gly','GGA':'Gly','GGG':'Gly'}
""" the rna is "UUCUCUACGGUAACAGGGGGCCGGAGGACGACGACGAGAAUCGCCCCGGUGUAGCCGGUGGCGACGGGACGGGGACCUCCCACCGGGGUGGCCGGCAAUGUCGCUCGUAUG" # This is already converted from DNA to RNA so there's no worry about the original RNA
"""
dna="AAGAGATGCCATTGTCCCCCGGCCTCCTGCTGCTGCTCTTAGCGGGGCCACATCGGCCACCGCTGCCCTGCCCCTGGAGGGTGGCCCCACCGGCCGTTACAGCGAGCATAC"
def main():
print("\nWelcome to the DNA program: The Code of Life.")
print("\nSample DNA strand:\n")
print("Regular DNA:")
print_bases(dna)
print("DNA after complement: ")
dna2 = dna_complement(dna)
print_bases(dna2)
print("DNA after RNA convertion: ")
rna = convert_to_rna(dna)
print_bases(rna)
print("The result of translation: ")
amino_acid = translate(rna)
print(amino_acid)
如上圖所示。 (多虧了一個叫 Random Davis 的用戶告訴我糾正我在描述上的錯誤,現在我展示了我現在擁有的一切,可能會好一點)
當我嘗試運行它時,類型錯誤告訴我 str object 不可調用,有人可以幫我解決這個問題嗎?
更多信息:很抱歉沒有早點說這個,我試圖獲得像 UUU <-> Phe、UUA <-> Leu 和 AUU <-> Ile 這樣的轉換。 並在檢測到 UAA、UAG、UGA 后阻止蛋白質生成。
我會先重寫你的
range(0, len(rna), 3)
你想從你的輸入中得到 3 x 3 嗎? 例如,如果您輸入“ABCDE”,則首先要輸入“ABC”,然后輸入“BCD”,等等,這樣正確嗎?
如果是這樣,我會這樣做:
p = rna[i:i+3]
其中 rna 是您的輸入字符串。
還有,如果你找到了UUU、UUC或UUA,你想做什么? 如果你找到所有這些怎么辦?
我希望你覺得這有幫助。
def translate(rna):
amino_acid = []
for i in range(len(rna) - 2):
p = rna[i:i+3]
if p == "UUU" :
amino_acid.append(CODON_TABLE["UUU"])
if p == "UUC" :
amino_acid.append(CODON_TABLE["UUC"])
if p == "UUA" :
amino_acid.append(CODON_TABLE["UUA"])
return amino_acid
CODON_TABLE = {'UUU':'Phe','UUC':'Phe','UUA':'Leu','UUG':'Leu','CUU':'Leu','CUC':'Leu','CUA':'Leu','CUG':'Leu','AUU':'Ile','AUC':'Ile','AUA':'Ile','AUG':'Met','GUU':'Val','GUC':'Val','GUA':'Val','GUG':'Val','UCU':'Ser','UCC':'Ser','UCA':'Ser','UCG':'Ser','CCU':'Pro','CCC':'Pro','CCA':'Pro','CCG':'Pro','ACU':'Thr','ACC':'Thr','ACA':'Thr','ACG':'Thr','GCU':'Ala','GCC':'Ala','GCA':'Ala','GCG':'Ala','UAU':'Tyr','UAC':'Tyr','UAA':'STOP','UAG':'STOP','CAU':'His','CAC':'His','CAA':'Gln','CAG':'Gln','AAU':'Asn','AAC':'Asn','AAA':'Lys','AAG':'Lys','GAU':'Asp','GAC':'Asp','GAA':'Glu','GAG':'Glu','UGU':'Cys','UGC':'Cys','UGA':'STOP','UGG':'Trp','CGU':'Arg','CGC':'Arg','CGA':'Arg','CGG':'Arg','AGU':'Ser','AGC':'Ser','AGA':'Arg','AGG':'Arg','GGU':'Gly','GGC':'Gly','GGA':'Gly','GGG':'Gly'}
rna = "UUCUCUACGGUAACAGGGGGCCGGAGGACGACGACGAGAAUCGCCCCGGUGUAGCCGGUGGCGACGGGACGGGGACCUCCCACCGGGGUGGCCGGCAAUGUCGCUCGUAUG" # This is already converted from DNA to RNA so there's no worry about the original RNA
translate(rna)
請注意,我正在迭代輸入並忽略最后兩個字符,這就是我們迭代直到 range(len(rna)-2) 的原因。
所以如果你把整個 RNA 串變成一個密碼子串:
CODON_TABLE = {'UUU':'Phe','UUC':'Phe','UUA':'Leu','UUG':'Leu','CUU':'Leu','CUC':'Leu'} # etc
def translate(rna):
amino_acid = ""
for i in range(len(rna)-2):
three_letter = rna[i:i+3]
if three_letter in CODON_TABLE:
amino_acid += CODON_TABLE[three_letter]
# if a match is found, don't look for a new codon starting with
# the second or third letter of this codon
i += 2
return amino_acid
解釋: for i in range(len(rna)-2):
將為我們提供一個索引號,指向我們想要讀取的 RNA 字符串部分:
UUCUCUAC len = 8
012345 i = 0-5 = range(6)
rna[i:i+3]
給出了從第i
個字母開始的三個字母
UUCUCUAC = rna
UUC i = 0, three_letter = rna[0:3]
UCU i = 1, tl = rna[1:4]
CUC i = 2, tl = rna[2:5]
UCU i = 3, tl = rna[3:6]
CUA i = 4, tl = rna[4:7]
UAC i = 5, tl = rna[5:8]
對於每個三字母序列,如果它是密碼子,它會將密碼子的名稱添加到氨基酸中
amino_acid += CODON_TABLE[three_letter]
然后它將i
向前跳過 2,以避免尋找另一個以我們已經使用過的字母開頭的密碼子:
UUCUCUAC
UUC Phe
UCU (skip)
CUC (skip)
UCU Ser
CUA (skip)
UAC (skip)
如果它發現不是密碼子的東西,它會忽略它並移動到接下來的三個字母。 (我不是生物學家,不知道是不是每個三字母序列都是密碼子?)
UUCZUCUAC
UUC Phe
UCU (skip)
CUC (skip)
ZUC (not found)
UCU Sre
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.