web-dev-qa-db-ger.com

So erhalten Sie mehrzeilige Eingaben vom Benutzer

Ich möchte ein Programm schreiben, das mehrzeilige Eingaben erhält und zeilenweise damit arbeitet. Warum gibt es in Python 3 keine Funktion wie raw_input?

input erlaubt es dem Benutzer nicht, durch Zeilenvorschub getrennte Zeilen zu setzen (Enter) wird nur die erste Zeile ausgegeben.

Kann es in Variablen gespeichert oder sogar in einer Liste gelesen werden?

15
MaciejPL

In Python 3.x wurde raw_input() von Python 2.x durch die Funktion input() ersetzt. In beiden Fällen können Sie jedoch keine mehrzeiligen Zeichenfolgen eingeben. Zu diesem Zweck müssen Sie die Eingabe Zeile für Zeile von dem Benutzer abrufen und dann .join() mit \n verwenden. Alternativ können Sie auch verschiedene Zeilen verwenden und sie mit dem +-Operator getrennt voneinander trennen \n

Um mehrzeilige Eingaben vom Benutzer zu erhalten, können Sie wie folgt vorgehen:

no_of_lines = 5
lines = ""
for i in xrange(5):
    lines+=input()+"\n"

print lines

Oder

lines = []
while True:
    line = input()
    if line:
        lines.append(line)
    else:
        break
text = '\n'.join(lines)
22
ZdaR

raw_input kann die EOF korrekt verarbeiten, sodass wir eine Schleife schreiben und lesen können, bis wir vom Benutzer eine EOF (Strg-D) erhalten:

Python 3

print("Enter/Paste your content. Ctrl-D or Ctrl-Z ( windows ) to save it.")
contents = []
while True:
    try:
        line = input()
    except EOFError:
        break
    contents.append(line)

Python 2

print "Enter/Paste your content. Ctrl-D or Ctrl-Z ( windows ) to save it."
contents = []
while True:
    try:
        line = raw_input("")
    except EOFError:
        break
    contents.append(line)
26
xiaket

input(Prompt) ist im Grunde gleichbedeutend mit

def input(Prompt):
    print(Prompt, end='', file=sys.stderr)
    return sys.stdin.readline()

Sie können direkt aus sys.stdin lesen, wenn Sie möchten. 

lines = sys.stdin.readlines()

lines = [line for line in sys.stdin]

five_lines = list(itertools.islice(sys.stdin, 5))

Die ersten beiden erfordern, dass die Eingabe irgendwie endet, indem entweder das Ende einer Datei erreicht wird oder der Benutzer Control-D (oder Control-Z in Windows) eingibt, um das Ende zu signalisieren. Die letzte Zeile wird zurückgegeben, nachdem fünf Zeilen gelesen wurden, entweder von einer Datei oder vom Terminal/der Tastatur.

3
chepner
no_of_lines = 5
lines = ""
for i in xrange(5):
    lines+=input()+"\n"
    a=raw_input("if u want to continue (Y/n)")
    ""
    if(a=='y'):
        continue
    else:
        break
    print lines
0
mohankumar.A

Verwenden Sie die integrierte Funktion input(), um eine Eingabezeile vom Benutzer abzurufen.

Sie können die Hilfe hier lesen .

Sie können den folgenden Code verwenden, um mehrere Zeilen auf einmal zu erhalten (durch eine leere Zeile zu beenden):

while input() != '':
    do_thing
0
maggick