2012-04-06 4 views
0

ich ein Programm gemacht:Python-Skript stirbt, wenn ich mehrzeiligen Text in Eingabeaufforderung einfügen

import collections 
x = input("Enter in text: ") 
x_counter = collections.Counter() 
x_counter.update(x) 
print("Your sequence contains:\n") 
for i in '`1234567890-=qwertyuiop[]\asdfghjkl;zxcvbnm,./[email protected]#$%^&*()_+QWERTYUIOP\ 
{}|ASDFGHJKL:"ZXCVBNM<>?': 
    print(i, x_counter[i]) 

, dass die Anzahl der Male druckt ein Brief in einem Text verwendet wurde. Wenn der Benutzer einen kleineren Text eingibt, wie zum Beispiel einen Absatz ... läuft das Programm gut. Wenn der Benutzer einen sehr langen Text eingibt, sage 5 Absätze ... beendet das Programm und führt alle Eingaben als Bash-Befehle aus ... Warum ist das ???

Antwort

5

Das ist, weil input nur eine einzige Zeile vom Nutzer betrieben wird, gemäß dem folgenden Beispiel:

pax> cat qq.py 
x = raw_input ("blah: ") # using raw_input for Python 2 
print x 

pax> python qq.py 
blah: hello<ENTER> 
hello 

pax> there<ENTER> 
bash: there: command not found 

pax> 

Eine Möglichkeit besteht darin, die Informationen aus einer Datei zu lesen, anstatt input verwenden, aber Sie können auch etwas tun wie:

def getline(): 
    try: 
     x = raw_input ("Enter text (or eof): ") 
    except EOFError: 
     return "" 
    return x + "\n" 

text = "" 
line = getline() 
while line != "": 
    text = text + line; 
    line = getline() 
print "\n===\n" + text 

die Eingabe vom Benutzer lesen, wird fortgesetzt, bis sie die Eingabe mit EOF (CTRL-D unter Linux) Ende:

pax> python qq.py 
Enter text (or eof): Hello there, 
Enter text (or eof): 
Enter text (or eof): my name is Pax. 
Enter text (or eof): <CTRL-D> 
=== 
Hello there, 

my name is Pax. 
+0

Das hilft nicht ... was bekommt mehr als eine einzige Zeile vom Benutzer ??? – Billjk

+2

@jZompK Sie können das ziemlich leicht googeln. –

+2

vielleicht sollten Sie ihm schicken, dass "lass es mich für Sie googeln" link –

Verwandte Themen