wx.CheckBox und If Abfragen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

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
http://www.snowflake-sl.info/index.html
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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:

Code: Alles auswählen

if i.startswith("A") or (i.startswith("T") == True):

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
Das Leben ist wie ein Tennisball.
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

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
http://www.snowflake-sl.info/index.html
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

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
http://www.snowflake-sl.info/index.html
Antworten