Seite 1 von 1

Unhashable type

Verfasst: Samstag 20. Juni 2020, 23:56
von Merle254
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.

Re: Unhashable type

Verfasst: Sonntag 21. Juni 2020, 00:38
von Sirius3
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.

Re: Unhashable type

Verfasst: Sonntag 21. Juni 2020, 01:26
von Merle254
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:

Re: Unhashable type

Verfasst: Sonntag 21. Juni 2020, 09:10
von Sirius3
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.