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....
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.
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?"#erzeugteineJ/NAbfrage
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): ")
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.
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…
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.
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.
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:
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.
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.