Posts by noisefloor

    Hallo,


    Quote

    Gibt es ein PI-Forum dass nicht Prgrammierkundig-fixiert ist? Für Menschen die nicht programmieren können.

    Es gibt doch auch hier Unterforen, die auf Fragen zu Anwendungen, zur Systemeinrichtung u.ä. gedacht sind und aktiv genutzt werden.


    Wenn man den Pi aber dafür nutzt, wofür er (ursprünglich) gedacht war, dann muss man sich zwangsläufig mit Hardware und Programmierung beschäftigen. Hardware kann man vielleicht noch umgehen, wenn man z.B. einen fertigen HAT einsetzt, aber ein paar Zeilen Code, damit eine LED blinkt oder so was braucht's halt immer.


    Wenn man eine Idee hat, hier postet und dann darauf hofft, dass das einem jemand zusammenlötet und coded, dann wird das ziemlich sicher nichts. Alle, die hier helfen, machen das in Ihrer Freizeit. Aber es gibt Leute, die bauen und löten und coden beruflich und die setzen auch Ideen anderer um. Alles eine Frage des Stundenlohns, den man bereit ist, zu zahlen...


    Gruß, noisefloor

    Hallo,


    du willst also wissen, wie oft du `verr` von zahl abziehen bzw. dazu addieren kannst, damit der Rest möglichst nahe an Null ist?



    `number` ist die Ausgangszahl, `value` die Zahl, um die jeweils verringert / erhöht werden soll. Die Funktion geht implizit davon aus, das `value` positiv ist (sonst stimmt u.U.) das Ergebnis nicht.


    Gruß, noisefloor

    Hallo,


    Quote

    das ist doch auch sowas wie ne globale Variable?

    Es gibt in Python eine globalen Namensraum, aber keine globalen Variablen wie in anderen Programmiersprache.

    Bei Python reicht man _immer_ alles explizit herum und verlässt sich nicht auf den globalen Namensraum.


    Gruß, noisefloor

    Hallo,


    wenn du eine Liste nutzt _musst_ du die Funktion x-Mal hintereinander aufrufen, damit du eine garantierte Reihenfolge hast. Wenn du die Werte in beliebiger Reihenfolge und trotzdem zugeordenert speichern willst brauchst du als Datenstruktur ein Dict oder NamedTuple.


    Je nach dem, was du vorhast, kann auch der Einsatz von Data Classes Sinn machen. Gibt's aber erst ab Python 3.7.


    Gruß, noisefloor

    Hallo,


    mischtkrabb : es gibt _nur _genau_ einen_ Weg, den man benutzen will, um Werte aus einer Funktion zurück zu geben: das `return`Statement. Vergiß' am besten, dass es `global`gibt.


    Quote

    in den ganzen Tutorials und docs wird das jeweils nur für eine Funktion betrachtet. ich habe noch nichts gefunden, wo beschrieben ist wie man Variablen aus einer Funktion in einer anderen Funktion nutzt...

    In dem du den zurück gegbenen Wert der anderen Funktion übergibst? Ich verstehe ehrlich gesagt dein Problem nicht, weil das eigentlich alles mega-offensichtlich ist. Mach' mal bitte eine real-world Beispiel.


    Quote

    So wie ich das bisher kapiert und verstanden habe, ist wohl Beispiel 1 oder Beispiel 3 am besten

    Nein. Beispiel 1 ist richtg, Beispiel 3 returniert gar nichts sondern gibt nur nach stdout aus. Also bekommst du von Bsp 3 nichts, was du weiter verarbeiten kannst.


    Gruß, noisefloor

    Hallo,


    wusa: vielleicht solltest du nochmals die entsprechenden Sektionen im offiziellen Python-Tutorial auf docs.python.org durcharbeiten. Der Zugriff auf mehrelementige Datentypen wie z.B. Listen, Tuple und Dicts ist essentiell wichtig. Das sind absolute Grundlagen, die man verinnerlicht haben muss. Sonst wird das nix mit der Python-Programmierung.


    Gruß, noisefloor

    Hallo,


    sieht doch besser aus :-) Im gezeigten Code hat Zeile 10 `return data` keinen Sinn, weil im Aufruf (Zeile 15) kein Rückgabewert erwartet wird. Außerdem liefert die Funktion so wie so nur das zurück, was rein gegeben wurde.


    Gruß, noisefloor

    Hallo,


    Quote

    Doch, list_old bzw. mittlerweile list_backup brauche ich unbedingt und das war quasi auch genau das, wonach ich hier fragte. Wenn die Datei nicht gelesen werden kann, ist die Liste leer --> list [].

    Nein, brauchst du _nicht_. Du hast lediglich einen konzeptionellen Denkfehler. Wenn die gelesene Liste leer ist, dann überschreibst du die bestehende Liste halt _nicht_. Dann sparst du dir auch die Krücke via old_list oder was auch immer.

    Und wenn die Liste leer ist, dann rufst du halt _nicht_ update_text auf.

    Du solltest hier nochmal die Aufteilung von deinem Code überdenken und das ggf. auf mehr Funktionen aufteilen.


    Mal abgesehen davon kennen wir deinen restlichen Code nicht. Und auf Basis des gezeigten Codes kann keiner Wissen, ob du ggf. die Liste noch woanders brauchst. So was musst du dann schon explizit von Anfang an sagen.


    Der Code Post #11 ist ein bisschen schräg. Zeile 3 ist schräg - wozu ist das, eine Liste mit leeren Strings? Wenn du Platzhalter brauchst, nimm' `None`. Zeile 4 ist schräg - `__init__` ohne Klasse? Zeile 15 ist schräg. Ja, das geht, aber Listen kennen eine Methode `clear`, das ist schöner. Die Frage ist auch, warum du die Liste nicht direkt leer anlegst. Weil: im gezeigten Code wir die Default Liste nie benutzt, sondern wenn nur geleert.


    Ansonsten ignorierst du scheinbar geflissentlich, was ich dir zu Variablennamen geschrieben habe. Wenn du früher oder später scheinbar nicht nachvollziehbare Fehler bekommst, denk' einfach nochmal an das, was ich dir in Post #3 geschrieben habe.


    Gruß, noisefloor

    Hallo,


    dann denk' mal scharf drüber nach, ob du list_old überhaupt brauchst... Und wenn du dann richtigerweise zu dem Ergebnis gekommen bist, dass das es nicht brauchst, überdenkst du nochmal den Code im `else` Block, der zu `try` gehört.


    Wenn die Datei `test.txt` existiert - egal ob leer oder nicht - , dann wird der `try` Block immer durchlaufen und nie eine Exception werfen.


    Nackte try...except sind fast immer falsch, weil du damit _alle_ Fehler, inkl. Programmierfehler abfängst. Willst du aber nicht.


    Zeile 7 im Code aus Post #9 ist überflüssig, weil du damit die Variablen nur zusätzlich an einen weiteren Namen bindest.


    Welchen Sinn hat das `return` Statement der Funktion `read_txt`?


    Tipp: Programmieren ist nicht raten und Programmieren ist nicht Copy & Paste. Denk' mal _in_Ruhe_ über den Ablauf dieses Programmteils nach, male ihn dir auf ein Blatt Papier inkl. aller gewünschten bzw. möglichen Verzweigungen und dann schreibst du den Code neu.


    Gruß, noisefloor

    Hallo,


    Quote

    leider laufe ich hier in den gleichen error. den index error bekommt er erst in "_update_Text", da er dort in der 2ten Zeile erst merkt, dass die Liste leer ist.

    Ach stimmt - Denkefehler meinerseits. Dann müsstest du z.B. nach dem Lesen und vor dem Aufruf _update_text z.B. die Länge der Liste prüfen.


    Gruß, noisefloor

    Hallo,


    Quote

    wenn ich deinen code richtig verstehe muss ich nun read_text() regelmäßig ausführen?

    Richtig, und read_text für _update_text aus. _updatr_text muss ja nicht aufgerufen werden, wenn read_text kein Ergebnis hat.


    Quote

    Ich wollte hier für euch selbst erklärende variablen nutzen,

    Äh... du solltest in erster Linie für DICH (!) selbsterklärende Variablen nutzen. Du hast den größten Nutzen davon, nicht wir.


    Gruß, noisefloor

    Hallo,


    `list` ist ein ganz schlechter Name für einen Variable, weil du damit die Build-In Funktion `list`überschreibst. Was zu "lustigen" Nebeneffekten führen kann.


    Bzgl. der Logik: Wenn ein Fehler auftritt führst du einfach `updateText`nicht aus. BTW: Funktionsnamen werden klein_mit_unterstrich geschreiben.


    Also vom Prinzip:

    Python
    def _update_text(...):
    #do something
    def read_text(...):
    try:
    #einlesen
    except IndexError:
    pass
    else:
    _update_text(neuer_text)

    Gruß, noisefloor

    Hallo,

    ggf. wenn man in der Doku rumwühlt ginge es auch ohne slice. Gibt sicherlich einen Weg, direkt an die Stunden zu kommen...

    Nope, gibt's nicht. Mit datetime.datetime.now().astimezone().utcoffset().seconds bekommt man die Sekunden als Integer. Aber timedelta-Objekte kennen ootb keine Methode für Stunden. Die nächste Einheit sind Tage.


    Gruß, noisefloor