Seite 1 von 1
wx.CheckBox und If Abfragen
Verfasst: Freitag 8. Mai 2009, 09:52
von ete
Hallo!
Ich habe mehrere If-Abfragen und komm hier nicht weiter:
Code: Alles auswählen
...
self.check1 = wx.CheckBox(panel, -1, "")
self.check2 = wx.CheckBox(panel, -1, "")
...
string = ['TTCCTAATACCCGTCAGCTTG', 'ATTTGGGAAGTGATTCCATAG','ATGGGAACTCGGGAAGGAGAT','TGATAGTTATTGTTGTTGACT','AAGCTGATGCATTGAAGCACC']
for i in string:
if self.check1 == True:
if i.startswith("A") or i.startswith("T") == True:
if self.check2 == True:
if i.endswith("G") or i.endswith("C") == True:
print i
...
Wie kann ich jetzt ein else einbauen, für den Fall das die Checkboxen FALSE sind? Nach if wird ja eine Einrückung erwartet. Ich möchte aber die nächsten if's nur mit den schon gefilterten strings weitermachen. Man könnte alles in Funktionen packen aber vielleicht gibts ja eine einfachere Lösung?
Liebe Grüsse
Stefanie
Verfasst: Freitag 8. Mai 2009, 10:20
von EyDu
Meinst du so?
Code: Alles auswählen
for i in string:
go_else = True
if self.check1:
if i.startswith("A") or i.startswith("T"):
if self.check2:
if i.endswith("G") or i.endswith("C"):
print i
go_else = False
if go_else:
#do something else here
oder vielleicht so?
Code: Alles auswählen
for i in string:
go_else = self.check1 and self.check2
if self.check1:
if i.startswith("A") or i.startswith("T"):
if self.check2:
if i.endswith("G") or i.endswith("C"):
print i
if go_else:
#do something else here
Die ganzen "== True" kannst du dir sparen. Die mit "or" Verknüpften Bedingungen sind zwar nicht fehlerhaft, aber es wird es auf Gleichheit geprüft, dann das "or". Also so:
Heißen die Checkbocken wirklich check1, check2, ... oder liegt es nur am Beispiel? Dann solltest du vielleicht eine Liste daraus machen und mit all testen. Andernfalls solltest du den Boxen richtige Namen geben.
Außerdem passt die Frage wohl besser in "Allgemeines" und weniger in "wx".
Bis dann,
Sebastian
Verfasst: Freitag 8. Mai 2009, 11:10
von ete
Ich habs so gelöst:
Code: Alles auswählen
string = ['atcgcgctaggataggct', 'atgcgctcgaggatgagaga', 'actgaggatgaggagatc']
check1 = True
check2 = True
for i in string:
if check1 and check2:
if i.startswith("a") or i.startswith("t"):
if i.endswith("g") or i.endswith("c"):
print i
if check1 and not check2:
if i.startswith("a") or i.startswith("t"):
print i
if check2 and not check1:
if i.endswith("g") or i.endswith("c"):
print i
Die Check Buttons haben nur der Einfachhalber diese Namen. Danke auch für den Tip ==True. Das wusste ich noch nicht.
Liebe Grüsse und Danke!
Stefanie
Verfasst: Freitag 8. Mai 2009, 15:03
von EyDu
Die beiden letzten ifs sollte man noch durch elif ersetzen, da die Abfragen disjunkt sind. Ich weiß nicht, wie viele Verschachtelungen von "startswith/endswith" du hast, aber hier bieten sich vielleicht reguläre Ausdrücke an.
Was ich etwas unschön finde ist, dass in der letzten Abfrage die Positionen von "check1" und "check2" vertauscht sind.
Verfasst: Freitag 8. Mai 2009, 15:13
von ete
Danke für die Hinweise!
Es sind 5 Abfragen ganz unterschiedlicher Art (nicht nur startwith o.ä.), u.a. auch ob Werte aus TextCtrl grösser ode kleiner sind, etc.pp..
Liebe Grüsse
Stefanie