Seite 1 von 1
Neue Zeile in Python input
Verfasst: Dienstag 24. September 2024, 11:51
von Löwe
Hi, ich möchte einen Code schreiben, der einen input enthält. Dort soll dann ein Text eingegeben werden, der auch mehrzeilig sein kann. Wie bekomme ich Python dazu, über eine Zeile hinweg auszuwerten? Habe schon verschiedene Ansätze probiert (len, split, etc), aber nach einem Zeilenumbruch wird das ganze beendet. Bitte gebt mir irgendwas...
Ach ja, nach einem Zeilenumbruch sieht man im Input in der Shell so drei Punkte, falls das wichtig sein sollte.
Es geht hier um 3.12.0, danke schonmal im Voraus

Re: Neue Zeile in Python input
Verfasst: Dienstag 24. September 2024, 15:14
von Sirius3
Der Code enthält den Input oder soll der Code von irgendwoher Input bekommen?
Hast Du eine Pythondatei oder gibst Du gerade Code in eine interaktive Shell ein (das sind die drei Punkte).
Zeige einfach, was Du versucht hast.
Re: Neue Zeile in Python input
Verfasst: Mittwoch 25. September 2024, 19:52
von DeaD_EyE
Das ist die Eigenschaft der Funktion
input. Sobald die Eingabetaste betätigt, also ein Newline gesendet wird, liefert die input-Funktion den Text zurück.
Woher soll input wissen, wann du fertig bist?
Hier ein Beispiel, dass nach der zweiten Zeile aufhört, wenn ein nur Newline enthalten ist.
Code: Alles auswählen
zeilen = [input("Erste Zeile: ")]
while user_input := input(": "):
zeilen.append(user_input)
text_block = "\n".join(zeilen)
Ohne walrus operator (Assignment Expression)
Code: Alles auswählen
zeilen = [input("Erste Zeile: ")]
while True:
user_input = input(": ")
if user_input:
zeilen.append(user_input)
else:
break
text_block = "\n".join(zeilen)
Re: Neue Zeile in Python input
Verfasst: Mittwoch 25. September 2024, 20:29
von Sirius3
@Dead_Eye: das kann man schön kompakt mit der iter-Funktion schreiben:
Re: Neue Zeile in Python input
Verfasst: Mittwoch 25. September 2024, 21:36
von DeaD_EyE
Und wieso schreibst du das erst jetzt? Dann hätte ich mir das sparen können. Wobei, eigentlich nicht, da die meisten Anfänger erstmal fragen werden, was lambda ist. Auch den Sentinel der Funktion iter kennen nicht alle.
Re: Neue Zeile in Python input
Verfasst: Mittwoch 25. September 2024, 21:41
von __blackjack__
@DeaD_EyE: Darum ist es ja sinnvoll das zu zeigen. Damit mehr Leute das kennenlernen.

Re: Neue Zeile in Python input
Verfasst: Dienstag 15. Oktober 2024, 11:12
von Löwe
Sirius3 hat geschrieben: Dienstag 24. September 2024, 15:14
Der Code enthält den Input oder soll der Code von irgendwoher Input bekommen?
Hast Du eine Pythondatei oder gibst Du gerade Code in eine interaktive Shell ein (das sind die drei Punkte).
Zeige einfach, was Du versucht hast.
Das ganze in einem Programm, wobei die Eingabe per Copy Paste erfolgen soll.
Und diese Eingabe soll halt mehrzeilig sein können.
Re: Neue Zeile in Python input
Verfasst: Dienstag 15. Oktober 2024, 12:19
von __blackjack__
@Löwe: Das geht so nicht direkt. Da musst Du a) eine Schleife schreiben, welche die einzelnen Zeilen einliest, und b) irgendwie regeln, dass das Ende der Eingabe erkannt werden kann, denn das Zeilenende funktioniert dafür ja nicht mehr.
Wenn `input()` keine Eingabeaufforderung ausgeben soll, braucht man da keine leere Zeichenkette übergeben, sondern man kann auch einfach gar nichts übergeben.
Das mit den drei Punkten aus der Beschreibung im ersten Beitrag kann übrigens nicht sein. Es sei denn Du hast da tatsächlich noch Python 2, dann solltest Du das als erstes mal ändern, denn `input()` in Python 2 macht was anderes als `input()` in Python 3. Mit Python 2 will man sich nicht mehr herumschlagen.
Edit: Wenn man das Ende einer mehrzeiligen Eingabe an einer leeren Eingabe erkennen möchte, kann man beispielsweise folgendes tun:
Code: Alles auswählen
In [62]: "\n".join(iter(input, ""))
Hallo
Welt
Out[62]: 'Hallo\nWelt'
Re: Neue Zeile in Python input
Verfasst: Dienstag 15. Oktober 2024, 19:27
von bb1898
__blackjack__ hat geschrieben: Dienstag 15. Oktober 2024, 12:19
Das mit den drei Punkten aus der Beschreibung im ersten Beitrag kann übrigens nicht sein. Es sei denn Du hast da tatsächlich noch Python 2, dann solltest Du das als erstes mal ändern, denn `input()` in Python 2 macht was anderes als `input()` in Python 3. Mit Python 2 will man sich nicht mehr herumschlagen.
Erster Beitrag: Python 3.12 wird benutzt.
Ich grüble, ob man nicht die Standardeingabe als Stream benutzen und mit read() von ihr lesen könnte. Aber es ist mir nicht gelungen, in der Dokumentation die nötige Information zu finden.
Oder, natürlich, ein schlichtes GUI mit passendem Texteingabefeld.
Re: Neue Zeile in Python input
Verfasst: Dienstag 15. Oktober 2024, 21:15
von __blackjack__
@bb1898: Klar kann man von `sys.stdin` lesen. Ende der Eingabe wäre dann diese Datei zu schliessen. Strg + Z unter Windows oder Strg + D unter Linux.
Code: Alles auswählen
$ python3 -c 'import sys; print(repr(sys.stdin.read()))'
Hello
World
'Hello\nWorld\n'
Die letzte Zeile ist die Ausgabe nachdem ich Strg + D gedrückt habe. Danach kann man natürlich keine weiteren Eingaben mehr machen.
Re: Neue Zeile in Python input
Verfasst: Mittwoch 16. Oktober 2024, 18:45
von bb1898
Danke! Funktioniert auch mit Copy + Paste, und da ist es eben wirklich bequemer als Zeile für Zeile kopieren. Funktioniert nicht, wenn man es in IDLE laufen lässt - ich nehme an, da braucht es einen anderen Abschluss als Strg + Z (unter Windows)? An sys hatte ich überhaupt nicht gedacht und dort nicht nachgesehen.
Für ein reales Programm mit wirklichen Benutzern würde ich in diesem Fall allerdings stark zum GUI neigen.