Unhashable type

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Merle254
User
Beiträge: 8
Registriert: Donnerstag 4. Juni 2020, 16:13

Hallo,

ich habe mein Programm soweit fertig und habe es vorher in kleinen Stücken programmiert und da hat es auch funktioniert, aber zusammengefügt erscheint mir immer eine Fehlermeldung. Ich kenne die Fehlermeldung zwar, aber ich erkenne das Problem nicht, weil es vorher funktioniert hat.

DNA= input ("Gib den DNA-Abschnitt ein:")

firstString = "GCTA"
secondString = "CGAU"
thirdString = "GCUA"

string = DNA

mRNA = string.maketrans(firstString, secondString)
tRNA = string.maketrans(firstString, thirdString)

n = 3
a = [mRNA[x:x+n] for x in range (0,len(mRNA),n)]

aminosäuren = {"AUU":"Ile" , "AUC":"Ile" , "AUA":"Ile" , "AUG":"Met" ,
"ACU":"Thr" , "ACC":"Thr" , "ACA":"Thr" , "ACG":"Thr" ,
"AAU":"Asn" , "AAC":"Asn" , "AAA":"Lys" , "AAG":"Lys" ,
"AGC":"Ser" , "AGU":"Ser" , "AGA":"Arg" , "AGG":"Arg" ,
"GUU":"Val" , "GUC":"Val" , "GUA":"Val" , "GUG":"Val" ,
"GCU":"Ala" , "GCC":"Ala" , "GCA":"Ala" , "GCG":"Ala" ,
"GAU":"Asp" , "GAC":"Asp" , "GAA":"Glu" , "GAG":"Glu" ,
"GGU":"Gly" , "GGC":"Gly" , "GGA":"Gly" , "GGG":"Gly" ,
"UUU":"Phe" , "UUA":"Leu" , "UUG":"Leu" , "UCU":"Ser" ,
"UCC":"Ser" , "UCA":"Ser" , "UCG":"Ser" , "UAU":"Tyr" ,
"UAC":"Tyr" , "UAA":"Stopp" , "UAG":"Stopp" ,
"UGU":"Cys" , "UGC":"Cys" , "UGA":"Stopp" , "UGG":"Trp"}


new_list = []

for x in a:
mapped_value = aminosäuren.get(x)
if mapped_value is not None:
new_list.append(mapped_value)

print("mRNA:",string.translate(translation1))

print("tRNA:",string.translate(translation2))

print("Aminosäuren:", new_list)


Das ist mein Code. Hoffentlich könnt ihr mir weiterhelfen.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

einbuchstabige Variablennamen sind schlecht, weil sie nichts aussagen, vor allem, wenn man x einmal für einen Index benutzt (hier wäre sogar i akzeptabel), und für einen String (Aminosäure).
`a` für Amonisäuren ist auch schlecht.
Warum nennst Du `DNA` in das nichts-sagende `string` um? Das macht den Code noch unlesbarer.
`new_list` ist ein genauso nichts-sagender Name.
`translation1` und `translation2` sind nicht definiert.

Zum Fehler:
`maketrans` ist eine Statische Methode, die auf einem konkreten String aufzurufen ist verwirrend.
Das Ergebnis davon ist ein Wörterbuch, auf das Du dann per Slicing zuzugreifen versuchst, was natürlich unsinnig ist, daher die Fehlermeldung.
Solch ein Fehler würde gar nicht erst auftreten, wenn mRNA `translation_to_mRNA` heißen würde.
Merle254
User
Beiträge: 8
Registriert: Donnerstag 4. Juni 2020, 16:13

DNA= input ("Gib den DNA-Abschnitt ein:")

mRNA_dic = {"G":"C" , "C":"G" , "A":"U" , "T":"A"}

tRNA_dic = {"G":"C" , "C":"G" , "A":"U" , "U":"A"}

mRNA = []
for x in DNA:
mapped_value = mRNA_dic.get(x)
if mapped_value is not None:
mRNA.append(mapped_value)

tRNA = []
for x in mRNA:
mapped_value = tRNA_dic.get(x)
if mapped_value is not None:
tRNA.append(mapped_value)

n = 3
mRNA_list = [mRNA[x:x+n] for x in range (0,len(mRNA),n)]

aminosäuren_dic = {"AUU":"Ile" , "AUC":"Ile" , "AUA":"Ile" , "AUG":"Met" ,
"ACU":"Thr" , "ACC":"Thr" , "ACA":"Thr" , "ACG":"Thr" ,
"AAU":"Asn" , "AAC":"Asn" , "AAA":"Lys" , "AAG":"Lys" ,
"AGC":"Ser" , "AGU":"Ser" , "AGA":"Arg" , "AGG":"Arg" ,
"GUU":"Val" , "GUC":"Val" , "GUA":"Val" , "GUG":"Val" ,
"GCU":"Ala" , "GCC":"Ala" , "GCA":"Ala" , "GCG":"Ala" ,
"GAU":"Asp" , "GAC":"Asp" , "GAA":"Glu" , "GAG":"Glu" ,
"GGU":"Gly" , "GGC":"Gly" , "GGA":"Gly" , "GGG":"Gly" ,
"UUU":"Phe" , "UUA":"Leu" , "UUG":"Leu" , "UCU":"Ser" ,
"UCC":"Ser" , "UCA":"Ser" , "UCG":"Ser" , "UAU":"Tyr" ,
"UAC":"Tyr" , "UAA":"Stopp" , "UAG":"Stopp" ,
"UGU":"Cys" , "UGC":"Cys" , "UGA":"Stopp" , "UGG":"Trp"}


aminosäuren = []

for x in mRNA_list:
mapped_value = aminosäuren_dic.get(x)
if mapped_value is not None:
aminosäuren.append(mapped_value)



print("Aminosäuren:", aminosäuren)

print("mRNA:",mRNA)

print("tRNA:",tRNA)


Hab es nochmal umgeschrieben aber er zeigt mir immer noch unhashable type list an:
Traceback (most recent call last):
File "C:\Users\Merle\AppData\Local\Programs\Python\Python36\Informatik test amino.py", line 39, in <module>
mapped_value = aminosäuren_dic.get(x)
TypeError: unhashable type: 'list'

Dabei hat das vorher funktioniert :roll:
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Es gibt einen Knopf </> im Forumseditor damit Code lesbar dargestellt wird. Bitte benutz den.
Benutze keine Abkürzungen (dic) und keine Typen in Variablennamen (dic). mRNA_dic ist die Übersetzungsvorschrift für DNA nach mDNA. Dann nenn das auch so. `translate` hat doch wunderbar funktioniert, warum bist Du dann jetzt auf for-Schleifen umgestiegen? Was jetzt nämlich nicht mehr funktioniert ist, dass du jetzt Listen statt Strings hast, und die sind, wie der Fehler sagt, nicht hashbar.
Antworten