Seite 1 von 1

while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Montag 16. März 2015, 20:34
von mzwle
Hallo zusammen,
ich möchte eine while-Schleife mit Hilfe einer Eingabe abbrechen.
Solange jedoch keine Eingabe erfolgt, soll diese Schleife weiterlaufen.
Vorgestellt habe ich es mir so:

Code: Alles auswählen

while 1:
    #auszuführender Code
    if input() == 1:
       break
Jedoch habe ich hier das Problem, dass das Programm immer auf meine Eingabe wartet.

Vielen Dank im Vorraus
mzwle

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Montag 16. März 2015, 20:52
von Sirius3
@ mzwle: das macht man mit KeyboardInterrupt und Ctrl+C:

Code: Alles auswählen

try:
    while True:
        # do something
except KeyboardInterrupt:
    pass

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Montag 16. März 2015, 20:59
von mzwle
@Sirius3: Vielen Dank für die schnelle Antwort
Wie kann ich jetzt noch festlegen, dass es nur bei einer bestimmten Eingabe die Schleife abbricht?

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Montag 16. März 2015, 21:04
von Sirius3
@mzwle: Ctrl+C ist schon seit 50 Jahren der Standard, um etwas abzubrechen.

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Dienstag 17. März 2015, 09:55
von garreth
Hallo mzwle,

wenn du in Python 3 programmierst, ist die Rückgabe von "input()" immer ein String. Diesen versuchst du mit einem Integer zu vergleichen. Folglich wird deine Abfrage niemals wahr sein.
So würde es funktionieren:

Code: Alles auswählen

try:
    while True:
        if input() == str(1):
            break
except KeyboardInterrupt:
    pass

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Dienstag 17. März 2015, 11:00
von /me
garreth hat geschrieben:

Code: Alles auswählen

[...]
        if input() == str(1):
[...]
Da würde man erstens sicher einfach '1' statt str(1) verwendet und zweitens wird die Ausführung der Schleife durch das input angehalten.

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Dienstag 17. März 2015, 11:54
von garreth
/me hat geschrieben:
garreth hat geschrieben:

Code: Alles auswählen

[...]
        if input() == str(1):
[...]
Da würde man erstens sicher einfach '1' statt str(1) verwendet und zweitens wird die Ausführung der Schleife durch das input angehalten.
Richtig, es hätte den selben Effekt und wäre schneller geschrieben. Um die Problematik darzustellen finde ich allerdings "str()" wesentlich aussagekräftiger. Was willst du mir mit zweitens sagen? Klar wartet der Interpreter nach dem input() auf eine Eingabe. Verlassen wird sie aber nur wenn der Nutzer eine "1" eingibt.

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Dienstag 17. März 2015, 12:09
von jerch
mzwle hat geschrieben:@Sirius3: Vielen Dank für die schnelle Antwort
Wie kann ich jetzt noch festlegen, dass es nur bei einer bestimmten Eingabe die Schleife abbricht?
Das geht plattformübergreifend nicht so einfach, da die Terminals (das schwarze Fenster mit Textcursor und Textein-/ausgabe) sich unterschiedlich verhalten in Windows und unixoiden Systemen. Unter Windows kommst Du mit kbhit() und getch() aus dem Modul msvrct zum Ziel, unter Linux und Consorten gibt es diese Funktionen von Haus aus nicht.

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Dienstag 17. März 2015, 12:42
von BlackJack
Unter Linux & Co kann man aber das `curses`-Modul für so etwas verwenden.

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Dienstag 17. März 2015, 12:56
von /me
garreth hat geschrieben:Klar wartet der Interpreter nach dem input() auf eine Eingabe.
Genau das soll ja nicht passieren. Die Schleife soll permanent durchlaufen werden und wenn eine spezielle Taste (oder Tastenkombination) gedrückt wird, dann soll sie beendet werden.

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Dienstag 17. März 2015, 13:16
von garreth
/me hat geschrieben:Genau das soll ja nicht passieren. Die Schleife soll permanent durchlaufen werden und wenn eine spezielle Taste (oder Tastenkombination) gedrückt wird, dann soll sie beendet werden.
So jetzt hab ich mir das auch nochmal durchgelesen. Du hast Recht, diese Information habe ich überlesen.

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Mittwoch 18. März 2015, 16:34
von mzwle
Also gibt es für mein Problem keine Lösung?

Re: while-Schleife mithilfe einer Eingabe abbrechen

Verfasst: Mittwoch 18. März 2015, 16:36
von BlackJack
@mzwle: Doch, wurden weiter oben genannt: Unter Windows `msvrct` und unter Linux/Unix `curses`.