2016-05-07 6 views
1
>>> print("x\by") 
y 

print("a", end="") 
print("a", end="") 
print("a", end="") 
print("h", end="") 

aaah 

Aber mit mehreren Druckanweisungen, erhalte ich diese Ausgabe -Rück b Escape-Sequenz wird nicht mit mehreren print() Funktionen arbeiten

print("a\b", end="") 
print("a\b", end="") 
print("a\b", end="") 
print("h\b", end="") 

a a a h 

Warum hat es besonders viel Platz drucken nach jedem Zeichen.

Der Code funktioniert gut, wenn er über die Windows-Befehlszeile ausgeführt wird, ich habe es in Pycharms Konsole getestet.

Aber in Python repl, die \b löscht das vorherige Zeichen, während es Cursor ein Zeichen rückwärts bewegen soll.

>>> print("a\b", end="") 
>>> 
+2

Ihr Update löscht das Zeichen nicht. Die nächste >>> 'Eingabeaufforderung * überschreibt es *. –

+1

Versuchen Sie 'print (" a \ b \ n ", end =" ")' stattdessen. –

Antwort

3

Jedes Terminal oder jede Konsole kann das Zeichen \b anders handhaben. Alles, was Python tun kann, ist, die Daten in sys.stdout zu schreiben.

Hier wird die Konsole, die Sie verwenden, den Cursor für separate Schreibaufrufe weiter bewegen, es erscheint. Und das \b Zeichen löscht nichts in der Konsole, es bewegt lediglich den Cursor innerhalb desselben Schreibaufrufs zurück.

Also für print('x\by', end='') die Konsole Ausgänge x, bewegt sich einen Schritt, Ausgänge y an der gleichen Stelle zurück, und jetzt hat festgehalten, dass es drei Zeichen geschrieben, so dass die Ausgangsposition auf Spalte 3. Der nächste print() startet die Ausgabe Daten von dieser neuen Position.

Ihr Code print() funktioniert auf den meisten Terminals oder Konsolen, weil die meisten davon nicht darauf achten, wie viele Zeichen ausgegeben werden, nur wo der Cursor gerade positioniert wurde. Aber dass Sie eine Konsole haben, die sich anders verhält, ist nicht Pythons Fehler.

Wenn Sie den interaktiven Interpreter von Python verwenden, berücksichtigen Sie, dass es auch Drucke; so print("a\b", end="") mit verlässt Python, um dann die Zeile mit der nächsten >>> Aufforderung überschreiben:

>>> print("a\b", end="") 
>>> 

Verwenden print("a\b\n", end="") statt, und Sie werden die a ist immer noch da sehen:

>>> print("a\b\n", end="") 
a 
-2

schreiben am Ende

Flush=true 

Ich denke, das ist das Problem versuchen und schreiben Sie hier, was ausgegeben hatte, weil jetzt ich es nicht testen kann. (Schreiben vom Telefon)

0

Flush = True ist die richtige Antwort in diesem Fall


Wenn Sie tatsächlich in der Python-Konsole drucken dann das Flush-Argument fi Zuerst wird das Ergebnis ausgedruckt und dann die Funktion beendet. Bei mehreren Escape-Zeichen sollte die Rücktaste oder eine andere ausgedruckte Stelle angezeigt werden. Warum es passiert, ist mir nicht bekannt, da ich gerade in Python anfange, aber nach gründlicher Recherche und Experimenten habe ich festgestellt, dass es wahr ist.

Verwandte Themen