Hướng dẫn how do you go back one line in python? - làm thế nào để bạn quay lại một dòng trong python?

Hai phương pháp để ghi đè các câu lệnh in trong Python

Xin chào tất cả mọi người, Thijmen ở đây, và trong bài viết này, tôi sẽ trình diễn hai phương pháp để ghi đè lên các dòng trong Python bằng cách sử dụng trình tự thoát ANSI.overwriting previously printed lines in Python using ANSI escape sequencues.

Bài viết này cũng có sẵn ở định dạng video trên YouTube.

Hoàn tác các câu lệnh in có thể rất hữu ích nếu bạn muốn cung cấp đầu ra liên tục mà không làm lộn xộn màn hình.continuous output without cluttering the screen.

Việc thực hiện và kết quả dự định hơi khác nhau cho mỗi phương thức, do đó, một phương pháp nào sẽ thực sự phụ thuộc vào trường hợp sử dụng của bạn. Ưu điểm và nhược điểm của họ sẽ trở nên rõ ràng ngay khi bạn hiểu cách chúng hoạt động, vì vậy hãy để bắt đầu với phương pháp đầu tiên ngay lập tức.

Trong bài viết này, tôi cung cấp một số nền tảng giúp bạn hiểu cách thức và lý do tại sao các phương pháp hoạt động. Nếu bạn thích sửa chữa nhanh, có một TL; DR ở phía dưới.

Phương pháp 1: Quay trở lại vận chuyển

Nhanh chóng và đơn giản.

Bản tóm tắt

  1. Đường in, nhưng kết thúc bằng một lần trở lại vận chuyển thay vì một ký tự mới. Điều này di chuyển con trỏ trở lại đầu dòng in.
  2. In một dòng khác, nhưng vì con trỏ hiện đang ở đầu dòng trước đó, đầu ra mới sẽ được in trên đầu dòng trước.

Cách tiếp cận

Theo mặc định, câu lệnh Python từ print kết thúc mỗi chuỗi được chuyển vào hàm với ký tự mới, \n. Hành vi này có thể được ghi đè với tham số chức năng ____ ____, là cốt lõi của phương pháp này.

Thay vì kết thúc đầu ra bằng một dòng mới, chúng tôi sử dụng trả lại vận chuyển.carriage return.

Khi chúng tôi kết thúc một câu lệnh print với sự trở lại vận chuyển, về cơ bản chúng tôi di chuyển con trỏ sang đầu dòng in, thay vì đến dòng tiếp theo. Sau đó, nếu chúng ta in một chuỗi khác, văn bản được in trên đỉnh của chuỗi trước. Trong Python, một sự trở lại vận chuyển được chỉ định với \r.

Ban đầu, thuật ngữ vận chuyển trả lại trên mạng đã đề cập đến một cơ chế hoặc đòn bẩy trên một máy đánh chữ được vận hành sau khi gõ một dòng văn bản, phù hợp với phần tử loại của máy trở lại bên trái của tờ giấy.

Trường hợp ví dụ

Giả sử chúng ta có một chuỗi đơn giản mà chúng ta muốn in ký tự theo ký tự, một ký tự cứ sau 0,5 giây:

Trường hợp ví dụ (chưa ghi đè).

Sử dụng câu lệnh print mặc định, điều này có vẻ như vậy:

Trường hợp ví dụ (chưa ghi đè).

Sử dụng câu lệnh print mặc định, điều này có vẻ như vậy:

Bây giờ hãy xem điều gì sẽ xảy ra nếu chúng ta kết thúc mỗi câu lệnh print bằng cách trả lại vận chuyển thay thế:

Phương pháp 1: Trường hợp ví dụ (có trở lại vận chuyển).

Tất cả các ký tự được in trên cùng một dòng!

Phương pháp 1 trong thực tế. Unfortunately, there is a caveat. Because we essentially output each consecutive print statement on top of the previous output, it is not feasible to print a line that is shorter than the line before.

Dễ dàng phải không? Thật không may, có một cảnh báo. Bởi vì về cơ bản chúng tôi xuất ra mỗi câu lệnh print liên tiếp trên đầu ra trước đó, nên không khả thi khi in một dòng ngắn hơn dòng trước đó.

Xem điều gì sẽ xảy ra nếu chúng ta in ‘xong ở cuối vòng lặp:

Phương pháp 1 Caveat: In các dòng ngắn hơn.clearing the previous line before we print a shorter string.

Chúng ta có thể ngăn chặn điều này bằng cách xóa dòng trước đó trước khi chúng ta in một chuỗi ngắn hơn.

Trình tự ANSI trên dòng 6 chỉ ra rằng dòng nơi đặt con trỏ phải được xóa (lưu ý \r ở cuối vòng lặp). Bằng cách sử dụng biến LINE_CLEAR làm tham số end, chúng tôi đảm bảo rằng không có ký tự mới nào được in.

Phương pháp 1: Ví dụ làm việc.

Phương pháp 2: “lên và rõ ràng”

Bản tóm tắt

  1. Hơi phức tạp hơn, nhưng đầu ra sạch hơn và linh hoạt hơn.
  2. Đường in (kết thúc bằng một dòng mới theo mặc định).
  3. Ngay trước câu lệnh print tiếp theo: Di chuyển con trỏ lên và xóa đường dây. Hành động này có thể được lặp lại để hoàn tác nhiều dòng in.

Cách tiếp cận

Theo mặc định, câu lệnh Python từ print kết thúc mỗi chuỗi được chuyển vào hàm với ký tự mới, \n. Hành vi này có thể được ghi đè với tham số chức năng ____ ____, là cốt lõi của phương pháp này.

Thay vì kết thúc đầu ra bằng một dòng mới, chúng tôi sử dụng trả lại vận chuyển.
  1. Khi chúng tôi kết thúc một câu lệnh print với sự trở lại vận chuyển, về cơ bản chúng tôi di chuyển con trỏ sang đầu dòng in, thay vì đến dòng tiếp theo. Sau đó, nếu chúng ta in một chuỗi khác, văn bản được in trên đỉnh của chuỗi trước. Trong Python, một sự trở lại vận chuyển được chỉ định với \r.
  2. Ban đầu, thuật ngữ vận chuyển trả lại trên mạng đã đề cập đến một cơ chế hoặc đòn bẩy trên một máy đánh chữ được vận hành sau khi gõ một dòng văn bản, phù hợp với phần tử loại của máy trở lại bên trái của tờ giấy.

Trường hợp ví dụ

Giả sử chúng ta có một chuỗi đơn giản mà chúng ta muốn in ký tự theo ký tự, một ký tự cứ sau 0,5 giây:

Trường hợp ví dụ (chưa ghi đè).two advantages over the first method:

  1. Sử dụng câu lệnh print mặc định, điều này có vẻ như vậy:
  2. Bây giờ hãy xem điều gì sẽ xảy ra nếu chúng ta kết thúc mỗi câu lệnh print bằng cách trả lại vận chuyển thay thế:

Phương pháp 1: Trường hợp ví dụ (có trở lại vận chuyển).

TL;DR

Tất cả các ký tự được in trên cùng một dòng!

Phương pháp 1 trong thực tế.

Dễ dàng phải không? Thật không may, có một cảnh báo. Bởi vì về cơ bản chúng tôi xuất ra mỗi câu lệnh print liên tiếp trên đầu ra trước đó, nên không khả thi khi in một dòng ngắn hơn dòng trước đó.