Hallo, ich beschäftige mich seit ein paar Tagen mit Python und wollte mal fragen welche Möglichkeiten es gibt das Programm welches am Ende angekommen ist nochmal auszuführen. Es findet also eine Abfrage statt möchten Sie einen weiteren Test durchführen (j/n)..... Müsste man das ganze Programm in eine While Schleife einrücken oder gibt es eine andere Möglichkeit so wie ein jmp oder goto....
Nun, kennt Python so etwas wie "goto"? Wenn nicht, warum nicht? https://www.python-forum.de/viewtopic.php?t=52193
Thomas schrieb: > Müsste man das ganze Programm in eine While Schleife einrücken oder gibt > es eine andere Möglichkeit so wie ein jmp oder goto....
1 | #!/python
|
2 | def dein_programm(): |
3 | # …
|
4 | return
|
5 | |
6 | while True: |
7 | dein_programm() |
Thomas schrieb: > Müsste man das ganze Programm in eine While Schleife einrücken oder gibt > es eine andere Möglichkeit so wie ein jmp oder goto.... Eine Schleife wäre eine Möglichkeit. Eine andere wären die Methoden der exec*-Familie aus dem Standardmodul os. Mit diesen Methoden wird das Betriebssystem angewiesen, den aktuell laufenden Prozeß durch einen frisch neu gestarteten zu ersetzen, der exec*() als Parameter spezifiziert wird. Das kann natürlich auch das aktuell bereits laufende Programm sein.
Ein T. schrieb: > Eine andere wären die Methoden der > exec*-Familie aus dem Standardmodul os. Uhhhhh, das ist aber schon arg von hinten durch die Brust ins Auge geschossen. ;-) Aber gut, hier noch einer: Mittels systemd** einen sich beendenden Prozess endlos automatisch neu starten. **oder ähnlichem Mechanismus
:
Bearbeitet durch User
Thomas schrieb: > Müsste man das ganze Programm in eine While Schleife einrücken oder gibt > es eine andere Möglichkeit so wie ein jmp oder goto.... Tipp: Mit vi kann man beliebig viele Zeile auf einmal einen weiter einrücken.
1 | 1,$ >> |
G. K. schrieb: > Thomas schrieb: > >> Müsste man das ganze Programm in eine While Schleife einrücken oder gibt >> es eine andere Möglichkeit so wie ein jmp oder goto.... > > Tipp: Mit vi kann man beliebig viele Zeile auf einmal einen weiter > einrücken. > 1,$ >> Der ist schon ganz gut, wenn auch etwas ›Hau drauf‹ ;-) Oder zur ersten einzurückenden Zeile gehen, dann: mx Zur letzten einzurückenden Zeile gehen,dann: >'x Im Grunde genommen ist so ein vi schon ein recht intuitiv zu benutzender Editor.
Thomas schrieb: > das Programm welches am Ende > angekommen ist nochmal auszuführen. Es findet also eine Abfrage statt > möchten Sie einen weiteren Test durchführen (j/n)..... Die Frage am Ende, die setzt doch schon die Bedingung für eine Schleife.
also danke nach mal für die weiteren Möglichkeiten. Da das ganze eh wegen des langen Pfades des Netzlaufwerkes per Batch-Datei aufgerufen wird, werde ich das ganze old school in die Batch integrieren und das beendete Programm dann einfach nochmals aufrufen.
1 | start:
|
2 | python.exe ..... .py |
3 | |
4 | choice /m "Weiteren Test starten?" #erzeugt eine J/N Abfrage |
5 | if errorlevel 1 goto start |
:
Bearbeitet durch User
Ein Gutes Python Programm sollte sowieso immer eine main Funktion haben, nicht weil sie Gebraucht wird, sondern weil es best pratice ist und ermöglicht, dass du dein Programm schnell mal zu einem Modul aufwerten kannst. Außerdem hat das Verwenden einer Main Funktion den Vorteil, das man dafür Unittest schreiben kann, wenn man es will. Daher kann die Abfrage durchaus in der Main sein. Die Funktion do_work ist ein Platzhalter für deinen Code.
1 | def do_work(): |
2 | # Dein Python Script |
3 | pass |
4 | |
5 | def main(): |
6 | while True: |
7 | do_work() |
8 | run_again = input("soll das Programm nochmal laufen (J/N): ") |
9 | if not run_again.lower() == "j": |
10 | break |
11 | |
12 | |
13 | if __name__ == "__main__": |
14 | main() |
Norbert schrieb: > Der ist schon ganz gut, wenn auch etwas ›Hau drauf‹ ;-) > > Oder zur ersten einzurückenden Zeile gehen, dann: > mx > Zur letzten einzurückenden Zeile gehen,dann: >>'x > > Im Grunde genommen ist so ein vi schon ein recht intuitiv zu benutzender > Editor. Ja, schon. In allen anderen Editoren die ich nutze muss ich immer umständlich die TAB-Taste drücken. Das kann sich doch keiner merken! Ich muss das auch jedesmal wieder googeln.
Le X. schrieb: > Ja, schon. > In allen anderen Editoren die ich nutze muss ich immer umständlich die > TAB-Taste drücken. > Das kann sich doch keiner merken! Ich muss das auch jedesmal wieder > googeln. Ich sehe und verstehe dein Leid. ;-) Deshalb mag ich auch die einfache Sequenz: mx … >'x Zumal man das ›x‹ durch 25 andere Buchstaben ersetzen und so 26 individuelle Blöcke definieren kann. Mag gar nicht darüber nachdenken, wie schwierig es heutzutage ist, eine Tastatur mit 26 unterschiedlichen TAB-Tasten zu finden. Ein Teufelskreis…
also in der batch Datei muss es so heißen
1 | if %errorlevel%==1 |
sonst springt er nie aus der Schleife raus. Habs, jetzt aber doch in Python mit einer while Schleife gemacht, falls es mal auf einem nicht Microsoft System ausgeführt wird, dann ist es zumindestens im Programm integriert. Alles markieren und Tab rückt es passend ein.
:
Bearbeitet durch User
Harald K. schrieb: > Nun, kennt Python so etwas wie "goto"? Wenn nicht, warum nicht? > > https://www.python-forum.de/viewtopic.php?t=52193 Goto wirst du in modernen Programmiersprachen gar nicht mehr finden. Es ist eine Ausgeburt der Hölle, die Grundzutat für Spaghetti-Code. Wir wurde schon in der Schule beigebracht, dass man es nicht verwenden soll, denn ich hatte es in Pascal verwendet. Ich hatte zuvor viel mit Basic gemacht und diesen schlechten Programmierspiel rübergenommen. Oliver hat dir schon das richtige Muster genannt.
Rudi R. schrieb: > Goto wirst du in modernen Programmiersprachen gar nicht mehr finden. Python wäre aber nicht Python, wenn man goto nicht nachrüsten könnte: http://entrian.com/goto/download.html > Es ist eine Ausgeburt der Hölle, die Grundzutat für Spaghetti-Code. > Wir wurde schon in der Schule beigebracht, dass man es nicht verwenden > soll Dann nimm statt goto einfach comefrom. Das wird vom verlinkten Paket ebenfalls unterstützt. Alternativ zu while, goto und comefrom kann man Rückwärtssprünge bzw. Schleifen auch mittels Rekursion realisieren. Leider führt dies in Python normalerweise schnell zu Stacküberläufen. Python wäre aber nicht Python, wenn es nicht auch dafür eine Lösung gäbe: https://chrispenner.ca/posts/python-tail-recursion
Man kann natürlich für jede extrem einfache Aufgabe über eine Unzahl an bewusst blödsinnigen Umwegen sinnieren. Das heißt aber nicht automatisch, dass man es auch tun muss!
Yalu X. schrieb: > Python wäre aber nicht Python, wenn man goto nicht nachrüsten könnte: > > http://entrian.com/goto/download.html Das ist aber ein Aprilscherz. Guido van Rossum hatte sich aus gutem Grund gegen Goto entschieden und es wird auch nie kommen. Das scheinen vor allem Entwickler "aus der guten alten Zeit" zu vermissen. Ich frage mal morgen unsere Azubis, ob die wissen, was Sprungmarken sind. Ich hatte mal ein Rüffel erhalten, weil 2008/9 eine Doppelschleife in Java programmierte.
1 | OUTER: |
2 | for (Obj a in as) { |
3 | for (Obj b in bs) { |
4 | |
5 | if (...) { |
6 | break OUTER; |
7 | } |
8 | } |
9 | } |
Das geht ja auch in Java. Es sieht aus wie eine Sprungmarke, ist aber eine Benamsung der Schleife, dass ich sie mit break oder continue referenzieren kann. break und continue alleine referenzieren die innerste Schleife. Für den Chef waren das Sprungmarken, weil sie so aussahen, und deshalb böse. Das mit der Tail-Rekursion werde ich mir bestimmt noch anschauen. Das Konzept ist ja bekannt. Bei meinen Ausflügen in Scala und Haskell hatte ich damit Berührung. Und sinnvoll ist allemal. Viele scheuen rekursive Aufrufe, obwohl viele Dinge rekursiv einfach viel eleganter ausschauen.
Rudi R. schrieb: > ich damit Berührung. Und sinnvoll ist allemal. Viele scheuen rekursive > Aufrufe, obwohl viele Dinge rekursiv einfach viel eleganter ausschauen. Es geht nicht um aussehen, es geht um Optimierung.
Franko S. schrieb: > Es geht nicht um aussehen, es geht um Optimierung. die allererste Optimierung ist die, wartbaren, lesbaren und verstehbaren Quelltext zu schreiben.
D. F. schrieb: > die allererste Optimierung ist die, wartbaren, lesbaren und verstehbaren > Quelltext zu schreiben. [ ] Du hast den Hintergrund meiner Aussage verstanden.
Thomas schrieb: > Müsste man das ganze Programm in eine While Schleife einrücken oder gibt > es eine andere Möglichkeit so wie ein jmp oder goto.... Man kann auch List Comprehensions in Python einsetzen. Yalu X. schrieb: > Python wäre aber nicht Python, wenn es nicht auch dafür eine Lösung > gäbe: Ich musste so lachen.. Tatsächlich lernt man das mit den Schleifen (oder den Tests) nicht an einem Tag, TE sollte sich einfach selbst ein wenig mehr Zeit zum Lernen einräumen. Gute Schleifen sind auch Übung- und Probiersache (Diskutiersache auch gelegentlich) - und ein wenig Abguckerei bei guten Codern kann auch helfen. edit: ist eigentlich gerade gut fürs Lernen, wenn man offene Fragen hat, sich die Antworten dann aber erstmal selbst erarbeitet.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.