2009-06-11 8 views
0

Wenn Sie den folgenden Code ausgeführt wird, die ein einfaches Problem ist, arbeitet der Python-Interpreter weirdly:Weird-Programmverhalten in Python

n = input() 
for i in range(n): 
    testcase = raw_input() 
    #print i 
    print testcase[2:(int(testcase[0])+1)]+testcase[(int(testcase[0])+2):] 

Das Problem besteht n Strings zu nehmen und ein einzelnes Zeichen aus zu löschen. Zum Beispiel, angesichts der Zeichenfolge "4 PYTHON" sollte das Programm "PYTON" ausgeben. Der Code läuft in Ordnung, aber wenn ich die Kommentarmarke herausnehme, bewirkt die Anweisung print i, dass der Interpreter beim Parsen eine unerwartete EOF gibt. Irgendeine Idee warum dies passiert?

EDIT: Ich arbeite unter Python 2.5, 32 Bit in Windows.

+0

Welche Version von Python? Die for-Schleife funktioniert gut für mich mit 'print i' unkommentiert auf Windows Python 2.6.2c1 – workmad3

+0

funktionierte gut für mich auf Python 2.6.2 auf Linux. – Jack

+0

Ich habe es auch ohne Beanstandung laufen lassen - Python 2.5.1 OS X –

Antwort

1

Ich bin ein anderer, der keine Probleme mit oder ohne die kommentierte Print-Anweisung hat. Die Eingabefunktion in der ersten Zeile ist kein Problem, solange ich etwas gebe, was Python auswerten kann. Die wahrscheinlichste Erklärung ist also, dass Sie, wenn Sie diesen Fehler erhalten, etwas eingegeben haben, das kein gültiger Python-Ausdruck ist.

Haben Sie immer diesen Fehler erhalten? Können Sie eine Abschrift Ihrer interaktiven Sitzung mit Stack-Trace abschließen?

+0

"komplett mit Stack-Trace?" Das war's; Wenn der erste Wert eingegeben wurde, wurde er von einer anderen Eingabe() im Stapel abgerufen. –

4

Sind Sie sicher, dass das Problem die print-i-Anweisung ist? Der Code funktioniert als erwartet, wenn ich diese Anweisung auskommentieren und ausführen. Allerdings, wenn ich zu vergessen, einen Wert für den ersten Eingang() Anruf eingeben, und geben Sie einfach „4 PYTHON“ rechts von den Schläger, dann bekomme ich:

"SyntaxError: unexpected EOF while parsing" 

Dies geschieht, weil Eingang() nicht Speichern Sie einfach den eingegebenen Text, aber auch läuft eval() darauf. Und "4 PYTHON" ist kein gültiger Python-Code.

+0

Ich weiß, "4 PYTHON" war nur ein Beispiel dafür, wie Strings formatiert sind. Der Interpreter gibt mir einen EOF, auch wenn ich einen Wert für n festlege. –

+1

Sie brauchen raw_input; nicht eingegeben(). Input() erwartet einen gültigen Python-Ausdruck. lese http://docs.python.org/library/functions.html#input – NicDumZ

1

Auch das funktionierte für mich, es zu versuchen ...

n = raw_input() 
n = int(n) 
for i in range(n): 
    testcase = raw_input() 
    print i 
    print testcase[2:(int(testcase[0])+1)]+testcase[(int(testcase[0])+2):] 

Hinweis des n = int(n)

PS: Sie können weiterhin n = input() in der ersten Zeile verwenden; Ich bevorzuge row_input.

+0

Das funktioniert, aber ich verstehe immer noch nicht, warum es nicht bei der Verwendung von Eingabe(). –