Seite 1 von 1

nospace >>split() nicht mehr möglich

Verfasst: Montag 3. Dezember 2007, 16:22
von ete
Hallo!

ich hab folgendes Problem:

Ich möchte einen Text zeilenweise eingeben, ihn zeilenweise berechnen und die Werte auch pro Zeile ausgeben.

Dabei soll dem eingebenen Text die Leerzeichen entfernt werden und dieser in Kleinbuchstaben umgewandelt werden. Dies funktioniert auch alles, solange ich self.nospace anwende (Zeile 170). Die Leerzeichen werden zwar entfernt, nur funktioniert jetzt split() nicht mehr. Der Typ von Sequence ist immer Str, ob mit oder ohne der Anwendung von self.nospace. Deswegen verstehe ich das Problem nicht ganz. Nach split() kann ich self.nospace nicht anwenden, da durch split() eine Liste ensteht. Ich hab auch schon versucht über join() die Leerzeichen zu entfernen aber stosse genau auf dasselbe Problem.

Hier der Code:
http://paste.pocoo.org/show/13793/

Dieser wird in ein Notebook geladen:
http://paste.pocoo.org/show/10408/

Weiss jemand Rat?

Liebe Grüsse
Stefanie

Verfasst: Montag 3. Dezember 2007, 16:25
von Leonidas
Gibt es auch irgendwo ein kleines Minimalbeispiel, dass ohne wx auskommt?

Verfasst: Dienstag 4. Dezember 2007, 10:22
von ete
Habs mal schnell mit Tkinter gemacht:

http://paste.pocoo.org/show/13880/

Auf Konsole weiss ich nicht wie ichs machen soll, da die Eingabe ja gesplittet werden soll.

Problematische Zeile ist 114, Funktion dazu 107.

Ich hoffe das Bsp. hilft :)

Verfasst: Dienstag 4. Dezember 2007, 14:04
von CM
Hoi Stefanie,

ich habe mal was ähnliches Programmiert ;-). Deshalb verstehe ich nicht so ganz, warum Du überhaupt split() anwenden willst. Und auch die Funktion von nospace() kapiere ich nicht. Warum nicht einfach

Code: Alles auswählen

sequence.replace(' ', '')
? Für alle weiteren Fälle ist es doch ausreichend genau *einen* String, bzw. einen Teil daraus zu verwenden. Aber das ist natürlich Dir überlassen. Allerdings vermute ich doch, daß im ersten Paste das

Code: Alles auswählen

if isfile(sequence):
unlogisch ist, da die vorhergehenden Operationen nicht auf Dateien angewendet werden können. Also müßtest Du die Operationen, die eine Datei betreffen voran stellen und zwar alternativ zu dem GetValue(), falls da tatsächlich eine Sequenz ist.

Gruß,
Christian

PS Kennst Du das Biopython-Projekt?

Verfasst: Dienstag 4. Dezember 2007, 14:11
von CM
Nachtrag: Das Biopython-Projekt bietet interessante Interfaces zu Datenbanken und einiges DNA-Handling ist bereits für Anwender zu nutzen und muß nicht mehr neu geschrieben werden.

Allerdings habe ich, wie gesagt, auch Dinge selber geschrieben. Damals mußte ich, weil es nichts in der Richtung gab. Wenn Du an meinem DNA-Modul als Muster interessiert bist: PN mit Deiner E-Adresse an mich. (Es ist allerdings ziemlich anfängermäßig geschrieben: Ich habe gerade nach Jahren wieder reingeschaut und mich überkommt das Grausen ;-) .)

Gruß,
Christian

Verfasst: Dienstag 4. Dezember 2007, 14:26
von ete
Hallo!

Das mit dem replace ist ne gute Idee...Ich benutzte replace mind. 10 mal am Tag in Excel :shock: .Manchmal verrennt man sich in etwas.

Wenn ich split wegglasse, berechnet er nicht jeden Primer einzeln. Muss da mal nachforschen. Das war am Anfang ein Problem und ich habs glaube über split gelöst und bis jetzt drinbehalten.

Biopython streikt gerade ziemlich (siehe anderer Thread). Vielleicht kannst du mir ein bisschen helfen.

Danke für deine Tips!

Stefanie

Verfasst: Dienstag 4. Dezember 2007, 14:48
von CM
ete hat geschrieben:Wenn ich split wegglasse, berechnet er nicht jeden Primer einzeln. Muss da mal nachforschen. Das war am Anfang ein Problem und ich habs glaube über split gelöst und bis jetzt drinbehalten.
Wenn Du *zwei* Primer in einer Eingabe löst, dann machst Du was falsch ;-) .

Das Problem mit GUI-Code ist, daß man u. U. ziemlich lange suchen muß, um überhaupt die Logik zu finden, die betroffen ist, wenn Problemlogik in die GUI gemixt ist. Deshalb war es keine so dolle Idee Leonidas Frage mit einem Beispiel in TK zu beantworten ;-) Das eigentliche Problem ist: Du mixt Problemlogik mit dem GUI. Das ist ein Kardinalfehler. Da zumindest ist mein altes Beispiel, was ich gerade noch ergoogeln konnte (ein wunder, daß es die Seite noch gibt) vielleicht doch noch von Wert**: http://www.amp.ucdavis.edu/Homepages/St ... ython.html

Warum ein Kardinalfehler? Weil die GUI die Ein-/Ausgabe übernehmen soll*. Mehr nicht. Das ist bei CLIs ja auch nicht anders. Wenn Du nun Problemlogik reinmixt, wie Du es machst, mußt Du zum Aufrufen von Methoden zur Problemlösung immer den Umweg über die GUI gehen. Wenn Du eine Klasse hast, die Deine DNA repräsentiert, kannst Du Methoden auf die Instanz anwenden (was auch in Leonidas-Sinn OOP ist): z. B. self.reverse_complement(), um das Komplement zu erhalten.

Gruß,
Christian

* edit: Und natürlich Eventhandling, ...
** edit: Nicht so sehr auf den eigentlich Code achten - da überkommt mich wirklich das Grausen, der ist nicht so schön!

Verfasst: Dienstag 4. Dezember 2007, 15:34
von ete
Danke für die Comments!

Dies ist mein erstes Programm und ich wollte es nach Beenden eh hier ins Forum posten, um Kritik zu bekommen.

Ich schau mir deines mal an...

lg