Probleme mit if-elif-else

  • Ich grüße euch,


    Ich baue mir eine Alarmanlage und bin gerade dabei mittels Python die Alarmanlage zu programmieren trampel aber gerade auf der stelle.


    Der Alarm wird mit Telegram an und ausgeschalten.

    Wenn ich den Alarm anschalte und eine Tür geöffnet wurde kann ich den Alarm nicht mehr abschalten und muss das Script neu starten.

    Heißt ich bekomme trotz abschalten des Alarms eine Alarmmeldung wenn eine Tür geöffnet oder geschlossen wird.

    Ich möchte aber das nach dem ausschalten nichts mehr kommt solange ich den Alarm nicht wieder anschalte.


    Der Rest funzt soweit.


    Könnte mir jemand einen Tip geben?


  • Kannst du den Sinn von str("string") erklären? :conf:


    Variablen werden per Konvention klein_mit_unterstrich und idealerweise englisch geschrieben. Nur weil Umlaute in Python (3) möglich sind, ist es noch lange keine gute Idee.


    Dass du gefühlt 100 Funktionen innerhalb einer Funktion definierst, erhöht die Übersichtlichkeit nicht wirklich.


    Anstatt wieder und wieder

    Python
    def irgendwas():
        bot.sendMessage (chat_id, str("Alarm <irgendwas> geschlossen") + "\n" + asctime())
        print("Alarm <irgendwas> geschlossen")

    zu schreiben, schreibt man sich sinnvollerweise eine Funktion, die den Variablen Teil dieses Codes als Parameter hat.


    Strings baut man nie mit + zusammen, sondern mit str.format oder f-Strings.


    Anstatt while 1 verwendet man das pythonische while True (explizit ist schließlich besser als implizit).



    Zum "eigentlichen" Problem kann ich derzeit nichts sagen, dazu ist mir dein Programm zu unübersichtlich. Den Teil (Samt Schleife!), den du als "Hauptprogramm" kommentierst, in eine wiederholt aufgerufene Callback-Funktion zu packen, halte ich für einen großen Designfehler - der vielleicht etwas mit deinem Problem zu tun hat, vielleicht auch nicht.

  • Hallo,


    zusätzlich zu dem, was Linus schon gesagt hat: schreib' den Code erst für _eine_ Tür und teste das. Wenn das zuverlässig funktioniert und das Programm eine sinnvolle Grundstruktur hat, ist die Erweiterung auf 2, 3, 4, ... Türen kein großer Akt.


    Gruß, noisefloor

  • Das ich Anfänger bin und den Code zusammen geklaut habe, brauch ich sicher nicht mehr erwähnen.:lol:

    Ich bedanke mich für die Hinweise. Ich werde mich dann erst nochmal belesen.

  • Hallo,


    Programmieren ist halt nicht Copy & Paste. Also ein paar Grundlagen lernen (z.B. über das offizielle Tutorial auf docs.python.org) ist schon gut, damit du zumindest eine Idee hast, was dein Code macht.


    Gruß, noisefloor

  • Mahlzeit,

    Ist ja nicht so als hätte ich mich noch nicht mit der Thematik befasst.

    Ich habe ein Buch welches sich mit Python3 und dem RPi beschäftigt.

    Darin wird gezeigt wie man mit RPi.GPIO

    programmiert.

    Dann liest man woanders das RPi.GPIO veraltet ist.

    Was einen wieder etwas zurückwirft weil man sich dann mit was neuem beschäftigen muss.


    Manchmal braucht man jemanden der mehr weiß und einem sagt was falsch ist.


    Danke erstmal. Ich werde die Tips beherzigen.


    Bis dahin

  • Hallo,


    das Problem mit IT-Bücher ist halt, dass diese relativ schnell veraltet sein können, je nach Thema. Wenn du jetzt ein Buch z.B. zu C-Programmierung hast eher nicht, aber bei Themen mit sehr agiler Entwicklung wie dem Raspi kann das durchaus sein, dass das Buch nach 1 oder 2 Jahren nicht mehr den Stand der Dinge zeigt. Was man als Anfänger halt nicht beurteilen kann.


    Bei deutschsprachigen Python Büchern kommt nach meiner Erfahrung noch dazu, dass viel nicht-idomatisches bis falsches Python zeigen. Was in so fern doof ist, weil du unbewusst falsch lernst.

    Von daher ist das offiziellen Python Tutorial zum Lernen IMHO immer 1. Wahl, weil das garantiert fehlerfrei ist.


    Gruß, noisefloor

  • Für reines Python macht das Alter des Buches keinen großen Unterschied denke ich, zumindest in Python, ich wüsste jetzt auf Anhieb nichts was sich in den Grundlagenbüchern geändert hätte. Bei C++ und Ruby hatte ich da mehr Probleme.


    Empfehlenswert für eine schnelle und saubere Einführung sind z.B. A Byte of Python und Learn Python the hard Way. Diese können online kostenlos gelesen werden.


    Bei den deutschen Büchern kann man auch nicht alle in einen Topf werfen, es gibt viele Portierungen von Java Büchern die vom Reinwerk Verlag vertrieben werden die tatsächlich mist sind aber auch einige recht gute Übersetzungen von Oreilly und Packt die durchaus gelungen sind. Das Buch Python für Kids von Gregor Lingl ist sogar ein reines deutsches Buch und von Guido Van Rossum korrigiert worden, leider ist es aber Stand Python 2.5.

  • Hallo,


    Quote

    Für reines Python macht das Alter des Buches keinen großen Unterschied denke ich

    Definiere mal "reines Python".


    Und es macht schon wegen Python 2.7 vs. Python 3.x einen Unterschied. Es es macht auch einen Unterschied, ob das Buch Python >=3.4 oder Python <= 3.3 behandelt. Bis einschließlich 3.3 war noch relativ viel Bewegung in Python 3.


    Und selbst bei Python >=3.4 ist Bewegung: asyncio, DataClasses, Type Hints / Type Annotations - gut nicht unbedingt reine Anfängerthemen. Aber das z.B. Dicts aber Python >= 3.6 geordnet sind ist auch für Einsteiger von Interesse.


    Quote

    Learn Python the hard Way. Diese können online kostenlos gelesen werden.

    AFAIK gibt's das nicht mehr (legal) kostenlos? Wenn doch -> posten mal bitte einen Link.


    Quote

    aber auch einige recht gute Übersetzungen von Oreilly und Packt die durchaus gelungen sind.

    Namen der Bücher? Links auf die Webseite des Verlags?


    Quote

    die vom Reinwerk Verlag vertrieben werden

    Also das einzige mir bekannte brauchbare Python Buch ist vom Rheinwerkverlag "Python das umfassende Handbuch". Also zumindest in der Auflage, die ich mal hatte (3. glaube ich). Die ersten beiden Auflagen waren aber in der Tag schlecht, da konnte man nur von abraten. Grund: da wurde an vielen Stellen nicht-ideomatisches bis falsches Python gezeigt. Aber immerhin haben die Autoren das nach und nach verbessert.


    Gruß, noisefloor

  • Und es macht schon wegen Python 2.7 vs. Python 3.x einen Unterschied. Es es macht auch einen Unterschied, ob das Buch Python >=3.4 oder Python <= 3.3 behandelt. Bis einschließlich 3.3 war noch relativ viel Bewegung in Python 3.

    ob nun Bewegung oder nicht, das stört nicht beim lernen, die Neuerungen sind auch später schnell gelernt, auch falls man Python 2 lernt und später auf Python 3 umsteigt, der größte Vorteil von Python ist dass die Sprache flexibel ist und es viele Wege gibt. Auch wenn z.B. die Formatierung mit (f) aus Python 3.6 angenehmer zu nutzen ist ist .format nicht falsch und manchmal (z.B. Raspbian Stretch mit Python 3.4) notwendig.


    Wenn ich mir Lernquellen aussuche gehe ich nach der Qualität und nicht nach dem Alter weil alles andere nur demotivierend ist. Keine Kritik, nur meine persönliche Meinung.


    AFAIK gibt's das nicht mehr (legal) kostenlos? Wenn doch -> posten mal bitte einen Link.

    Hmm tatsächlich nur noch als Sample dann sorry aber gibt ja genug Ergebnisse bei der Google Suche wie man es anders bekommt^^


    Also das einzige mir bekannte brauchbare Python Buch ist vom Rheinwerkverlag "Python das umfassende Handbuch".

    das liegt daran das der Verlag regelmäßig den Namen wechselt, früher hieß er Galileo Verlag, dann Galileo Computing... man munkelt dass der Name immer wechselt wenn die Rezessionen zu negativ ausfallen was gerade im Python und C++ Foren der Fall ist.


    Dein Buch z.B. ist eine Überarbeitung des 2.6 Buchs auf Python 3 welches weiterhin die Fehler des ersten beinhaltet und Neuerungen der Sprache komplett ignoriert.


    Namen der Bücher? Links auf die Webseite des Verlags?

    kann ich jetzt spontan nicht ausführlich sagen da ich die Bücher größtenteils in englisch besitze (aus irgend einem Grund bekomme ich von Oreilly öfter mal Probeexemplare seit einer Rezension) allerdings gehört bei mir Python Ge-Packt (Packt) zum standardnachschlagewerk. Auch das Buch Neuronale Netze selbst programmieren (Oreilly) ist sehr gut übersetzt oder Python von Kopf bis Fuß (Oreilly).


    Allerdings gibt es bei Oreilly leider auch einige deutsche Übersetzungen kostenfreier Bücher die eher schlecht und Kostenpflichtig sind (Programmieren lernen in Python ist z.B. die fehlerhafte Übersetzung des Buchs Think Python und viele der Beispiele des Originals wurden weggestrichen).


    Verzeihung übrigens dass das Thema so weit am Titel vorbeigeschrammt.

  • Hallo,


    Quote

    ob nun Bewegung oder nicht, das stört nicht beim lernen, die Neuerungen sind auch später schnell gelernt, auch falls man Python 2 lernt und später auf Python 3 umsteigt,

    Nee. Für Einsteiger ist auch heute noch bei Python 2 das Thema String vs. Unicode Literal vs. Bytes verwirrend - was ja bei Python 3 komplett anders gelöst ist. Wenn man also für Python 2 lernt und (richtigerweise) auf Unicode-Literale zur Speicherung von Text setzt, lernt man was, was man so für Python 3 nicht braucht.


    Es gibt auch hier im Forum genug Threads, wo genau zu der grundlegenden Änderung zwischen Python 2 und 3 Fragen bei der Portierung des eigenen Programms kommen.


    Gruß, noisefloor