Schleife erst beim 2. mal ausführen

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
firstfacility
User
Beiträge: 28
Registriert: Samstag 20. Dezember 2014, 09:26

Hallo,

ich möchte gern mit einer Schleife meinen Regensensor überwachen. Hierzu sende ich mir beim Auslösen eine Nachricht. Ich habe leider das Problem das ich hin und wieder einen Fehlalarm bekomme (ca 1 mal pro Woche) Um nun Fenster zu steuern wäre es wichtig den Impuls zu überspringen. Hier der Code den ich nutze:

Code: Alles auswählen

def Thread():
        last_value = 1
        #global current_value
        while 1:
                current_value = wert()
                if current_value = 1 and last_value =1:
                        Message()
                last_value = current_value
                time.sleep(4)
th1=threading.Thread(target=Thread)
th1.start()

Wie kann ich erreichen wenn wert() das erste mal 1 ist, die schleife dies ignoriert und erst beim zweiten mal Message() ausführt. Kleine Info noch wenn es regnet wird alle 10 sec eine 1 in wert() geschrieben oder eben eine 0 wenn es nicht regnet. Hätte jemand einen Tipp ?

Gruß
Frank
BlackJack

@firstfacility: Das ist sicher nicht der Code den Du nutzt denn der ist nicht nur unvollständig sondern compiliert nicht einmal wegen Syntaxfehlern.

Ansonsten sollte der doch das tun was Du erreichen willst.
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

BlackJack hat geschrieben: Ansonsten sollte der doch das tun was Du erreichen willst.
Evtl. noch last_value mit 0 statt 1 initialisieren.
BlackJack

@nezzcarth: Verdammt ich hätte auf die Details achten sollen. :-)
firstfacility
User
Beiträge: 28
Registriert: Samstag 20. Dezember 2014, 09:26

sorry ihr habe natürlich recht ich versuche zur Zeit verschiedene Varianten aber auch mit 0 filtert er den ersten wert nicht aus sondern durchläuft gleich die Schleife.
BlackJack

@firstfacility: Zeig doch mal tatsächlichen Code denn es macht wenig Sinn über Fehler in Code zu reden der vielleicht so ähnlich aussieht, aber den Fehler gar nicht enthält. Und die *Schleife* wird natürlich jedesmal durchlaufen. Muss sie ja auch.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Man könnte das auch über eine innere Schleife lösen:

Code: Alles auswählen

while True:
    if get_value() == 1:
        while get_value() == 1:
            show_message()
Durch die vorherige `if`-Abfrage hätte man die erste zu ignorierende 1 wunschgemäß weggeworfen. Das spart das Merken des vorherigen Wertes ein, mag aber für manche nicht so gut lesbar zu sein. Ich würde vermutlich die Variante mit dem Merken des Vorgängers wählen, weil mir das weniger fehleranfällig erscheint.
Antworten