2012-03-12 10 views
7

Eventuali duplicati:
backspace character weirdnessComportamento del backspace nell'istruzione Python, qual è il comportamento corretto della stampa di un ' b' nel codice?

ho notato che 1. Se stampare solo backspace, ossia una sequenza di \ b in Python, allora è completamente vuoto. 2. Se stampo caratteri seguiti da backspaces cioè 'sssss \ b \ b \ b \ b \ b \ b', allora stamperà i caratteri di più ' Ma se stampo qualcosa come' ssss \ b \ b \ b \ baaaa ', quindi il backspace, \ b, funzionerà come se stessi scrivendo un backspace e cancellando i caratteri di "s".

Sto usando Python 2.6 su Windows XP. È questo comportamento atteso. Se cerco di ottenere la lunghezza di carattere backspace, esso viene stampato come 1.

Ecco il mio codice di prova -

>>> 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' 

>>> 

La mia domanda è-Qual è il comportamento previsto quando stampo '\ b' in Python e perché la cancellazione funziona solo in un caso particolare?

+5

Il backspace non cancella nulla, sposta il cursore a sinistra e viene sovrascritto da ciò che scrivi in ​​seguito. – alexis

+0

Certamente, ma la risposta non mi è piaciuta (l'autore sembra non aver mai sentito parlare di terminali cartacei), quindi ho aggiunto il mio qui. – alexis

risposta

7

risposta Expanded: il backspace non cancella nulla, sposta il cursore a sinistra e viene coperto da ciò che scrivi in ​​seguito. Se stavi scrivendo su un dispositivo che può mostrare overstriking (come un vecchio terminale "cartaceo" vecchio stile, che funziona come una macchina da scrivere), in realtà vedresti il ​​nuovo personaggio sopra quello vecchio. Questo è il reale backspace della ragione ha questa semantica.

Sulla riga di comando di Unix, la shell può essere impostata per interpretare il backspace come "cancella", a meno che non sia impostata per trattare solo l'eliminazione in questo modo. Ma questo dipende dal programma che legge i tuoi input.

5

Come detto da Alexis nel commento, sposta il cursore indietro (a sinistra di un carattere). Poi, quando si stampa, sovrascrive il carattere (applicando solo la riga di testo corrente)

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

Niente Python specifica, come evidenziato da "backspace character wiredness"

Problemi correlati