2012-03-12 20 views
7

Duplicar posible:
backspace character weirdnessComportamiento de retroceso en la instrucción Python, ¿cuál es el comportamiento correcto de imprimir un ' b' en el código?

me he dado cuenta de que 1. Si imprimir sólo las teclas de retroceso, es decir, una secuencia de \ b en Python, entonces es completamente en blanco. 2. Si imprimo caracteres seguidos de espacios en retroceso, por ejemplo, 'sssss \ b \ b \ b \ b \ b', imprimirá los caracteres múltiples Pero si imprimo algo como 'ssss \ b \ b \ b \ baaaa ', entonces el retroceso, \ b, en realidad actuará como si estuviera escribiendo un retroceso y borre los caracteres' s '.

Estoy usando Python 2.6 en Windows XP. Es este comportamiento esperado Si trato de obtener la longitud de carácter de retroceso, se imprime como 1.

Aquí está mi código de prueba -

>>> print 'ssss\b\b\b\b\baaaaa' 
aaaaa 
>>> print 'ssssssss\b\b\b\b\baaaaa' 
sssaaaaa 
>>> print 'ssssssss\b\b\b\b\b' 
ssssssss 
>>> print 'ssssssss\b\b\b\b\baaaaa' 
sssaaaaa 
>>> print '\b\b\b\b\b' 

>>> 

Mi pregunta es- ¿Cuál es el comportamiento esperado cuando imprimo '\ b' en Python y por qué la eliminación funciona solo en un caso particular?

+5

El retroceso no elimina nada, mueve el cursor hacia la izquierda y se sobrescribe con lo que escriba después. – alexis

+0

Ciertamente lo es, pero no me gustó la respuesta (el autor parece que nunca escuchó sobre terminales de copia impresa), así que agregué la mía aquí. – alexis

Respuesta

7

respuesta ampliada: La tecla de retroceso, no se elimina nada, mueve el cursor hacia la izquierda y queda cubierto por lo que escribe después. Si estuvieras escribiendo en un dispositivo que puede mostrar un exceso de movimiento (como una antigua terminal de "copia impresa", que funciona como una máquina de escribir), verías al nuevo personaje sobre el viejo. Ese es el verdadero razón de retroceso tiene esta semántica.

En la línea de comandos de Unix, el shell se puede configurar para interpretar el retroceso como "borrar", a menos que esté configurado para tratar solo eliminar de esta manera. Pero eso depende del programa que lea su entrada.

5

Como dijo Alexis en el comentario, mueve el cursor hacia atrás (a la izquierda con un carácter). A continuación, cuando se imprime, se sobrescribe el carácter (sólo se aplica a la línea actual de texto)

>>> print 'abc\b' 
abc 
>>> print 'abc\b\b\b' 
abc 
>>> print 'abc\b1' 
ab1 
>>> print 'abc\b\b\b123' 
123 

Nada Python específica, como lo demuestra "backspace character wiredness"

Cuestiones relacionadas