2012-03-12 31 views
7

thể trùng lặp:
backspace character weirdnessHành vi Backspace trong câu lệnh Python, hành vi chính xác của việc in mã ' b' là gì?

tôi đã nhận thấy rằng 1. Nếu tôi chỉ in backspaces, ví dụ: một chuỗi các \ b bằng Python, sau đó nó hoàn toàn trống. 2. Nếu tôi in các ký tự theo sau bởi các dấu backspaces tức là 'sssss \ b \ b \ b \ b \ b', thì nó sẽ in các ký tự của nhiều ' Nhưng nếu tôi in một cái gì đó như' ssss \ b \ b \ b \ baaaa ', sau đó backspace, \ b, sẽ thực sự hoạt động như tôi đang gõ một backspace và xóa các ký tự' s '.

Tôi đang sử dụng Python 2.6 trên Windows XP. Đây có phải là hành vi mong đợi không. Nếu tôi cố gắng để có được chiều dài của nhân vật backspace, nó được in như 1.

Đây là mã thử nghiệm của tôi -

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

>>> 

Câu hỏi của tôi là- hành vi mong đợi là gì khi tôi in '\ b' trong Python và tại sao việc xóa chỉ hoạt động trong một trường hợp cụ thể?

+5

Phím xóa không xóa bất kỳ thứ gì, nó sẽ di chuyển con trỏ sang bên trái và nó sẽ bị ghi đè bởi những gì bạn viết sau đó. – alexis

+0

Nó chắc chắn là, nhưng tôi không thích câu trả lời (tác giả dường như chưa bao giờ nghe nói về thiết bị đầu cuối bản sao cứng), vì vậy tôi đã thêm của riêng tôi ở đây. – alexis

Trả lời

7

câu trả lời mở rộng: Các phím lùi không xóa bất cứ điều gì, nó di chuyển con trỏ sang bên trái và nó được bao phủ bởi những gì bạn viết sau đó. Nếu bạn đang viết cho một thiết bị có thể hiển thị quá mức (chẳng hạn như thiết bị đầu cuối "bản sao cứng" cũ, hoạt động giống như máy đánh chữ), bạn sẽ thực sự thấy ký tự mới trên đầu máy cũ. Đó là thực tế lý do backspace có các ngữ nghĩa này.

Trên dòng lệnh unix, vỏ có thể được thiết lập để giải thích backspace là có nghĩa là "xóa" - trừ khi nó được thiết lập để chỉ xử lý xóa theo cách này. Nhưng đó là vào chương trình đọc đầu vào của bạn.

5

Như Alexis đã nói trong nhận xét, nó di chuyển con trỏ trở lại (sang bên trái bằng một ký tự). Sau đó, khi bạn in, nó ghi đè các ký tự (chỉ áp dụng cho các dòng hiện tại của văn bản)

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

Không có gì Python cụ thể, bằng chứng là "backspace character wiredness"