2015-06-10 3 views
-1

Я пишу программу, которая должна взять цепочку ДНК, а затем изменить ее на цепь РНК, после этого она должна взять цепь РНК и найти аминокислоты. Кажется, что мой код имеет проблему в строке 30, но я не могу найти решение для него. Если кто-то может мне помочь, я буду очень благодарен. Большое спасибо.ТипError: объект типа 'function' не имеет len()

DNA = input("Good day, please write your DNA chain: ") 

DNA = list(DNA) 

DNA = (letter.upper() for letter in DNA) 


def letters_check (DNAchain) : 
    nitrogenbases = ["C", "A", "T", "G"] 
    others = [symbol for symbol in DNAchain if symbol not in nitrogenbases] 
    if others : 
     print("Sorry, but these", others, "are not the DNA elements needed") 
    else : 
     print("Magnific! This is a great DNA chain") 



def mRNA (DNAchain) : 
    replacements = {"C":"G","T":"A","G":"C","A":"U"} 
    return "".join([replacements[base] for base in DNAchain]) 
    return "".join([replacements[base] for base in dnachain]) 

print ("mRNA(DNA): " ,mRNA(DNA)) 



def findStartStop(DNAchain): 
    for x in range(len(DNAchain)): 
     if DNAchain[x:x+3] == "AUG" : 
      tmprna = DNAchain[x:] 
      print("Found the start! tmprna: ", tmprna) 
      return tmprna 
    for x in range(len(tmprna)): 
     tmprna2 = tmprna[x:x+3] 
     if tmprna2 == "UAG" or tmprna2 == "UAA" or tmprna2 == "UGA" : 
      tmprna2 = tmprna[:x+3] 
      print("Found the stop! tmprna2: ",tmprna2) 
      break 


def finalrna(tmprna2) : 
    Translation = {"UUU":"Phe", "UUC":"Phe", "UUA":"Leu", "UUG":"Leu", 'UCU':'Ser', 'UAU':'Tyr', 'UGU':'Cys', 'UCC':'Ser', 'UAC':'Tyr', 'UGC':'Cys', 'UCA':'Ser', 'UAA':'Stop', 'UGA':'Stop', 'UCG':'Ser', 'UAG':'Stop', 'UGG':'Trp', 'CUU':'Leu', 'CCU':'Pro', 'CAU':'His', 'CGU':'Arg', 'CUC':'Leu', 'CCC':'Pro', 'CAC':'His', 'CGC':'Arg', 'CUA':'Leu', 'CCA':'Pro', 'CAA':'Gln', 'CGA':'Arg', 'CUG':'Leu', 'CCG':'Pro', 'CAG':'Gln', 'CGG':'Arg', 'AUU':'Ile', 'ACU':'Thr', 'AAU':'Asn', 'AGU':'Ser', 'AUC':'Ile', 'ACC':'Thr', 'AAC':'Asn', 'AGC':'Ser', 'AUA':'Ile', 'ACA':'Thr', 'AAA':'Lys', 'AGA':'Arg', 'AUG':'Met', 'ACG':'Thr', 'AAG':'Lys', 'AGG':'Arg', 'GUU':'Val', 'GCU':'Ala', 'GAU':'Asp', 'GGU':'Gly', 'GUC':'Val', 'GCC':'Ala', 'GAC':'Asp', 'GGC':'Gly', 'GUA':'Val', 'GCA':'Ala', 'GAA':'Glu', 'GGA':'Gly','GUG':'Val','GCG':'Ala','GAG':'Glu','GGG':'Gly'} 
    for y in range(0,len(tmprna2),3): 
     print(Translation[tmprna2[x:x+3]]) 
     print("This is your new code! finalrna: ", tmprna2[x:x+3]) 


print(letters_check(DNA)) 
print("your RNA is:", mRNA(DNA)) 
print(findStartStop(mRNA)) 
print(finalrna(tmprna2)) 

#Taken from: http://www.hgvs.org/mutnomen/codon.html and  http://www.dia.uniroma3.it/~paoluzzi/web/did/bioinf/2010/slides/lezione10.pdf 

ответ

4

Эта линия:

DNA = (letter.upper() for letter in DNA) 

создает generator функцию. ... и вы не можете получить функцию len().

Вы, вероятно, хотите, чтобы просто составить список здесь:

DNA = [letter.upper() for letter in DNA] 

... и вы, вероятно, следует также удалить эту строку:

return "".join([replacements[base] for base in dnachain]) 

Он имеет неправильный случай для DNAchain переменной, и линия не будет достигнута в любом случае.

Смежные вопросы