Python'da \ r tüm satırı silmez

Aug 31 2020

Oldukça karmaşık bir problemim var, ama işte "en basit versiyon", böylece onu daha iyi anlayabilirsiniz.

import time
for i in range(10):
   time.sleep(1)
   print('{}\r'.format(i), end="")

ve burada her şey yolunda gidiyor, sorun geri sayım yapmaya çalıştığımda geliyor

import time
for i in range(10):
   time.sleep(1)
   print('{}\r'.format(10-i), end="")

çıktı 10 ... sonra 90 ... 80 ... 70 ve böyle devam ediyor, 10'un ikinci şifresi iptal edilmemiş gibi görünüyor. Birisi bana nedenini söyleyebilir mi?

Yanıtlar

2 tzaman Aug 31 2020 at 01:46

\rimleci satırın başına götürür, ancak siz üzerine yazmadıkça zaten yazdırılmış olan herhangi bir şeyi "temizlemiyor" (bu, platforma bağlı olabilir). Böylece 0karakter görünür kalacaktır. Her zaman "sabit genişlikte" bir sütun yazdırarak bunun üstesinden gelebilirsiniz, böylece önceden kalan her şeyi boşaltmak için boş alanlar yazdırılır. Ayrıca endCR'yi parametrenin içine de koyabilirsiniz .
Böylece:

import time
for i in range(10):
   time.sleep(1)
   print('{: <3}'.format(10-i), end='\r')

Bu, boşluk dolu, sola hizalanmış, genişlikli bir sütunu belirtmek için bir biçim belirticisi kullanır . Sayacınızın ihtiyaç duyduğu sayıya bağlı olarak daha yüksek bir sayıya değiştirebilirsiniz . <33

1 ManasSambare Aug 31 2020 at 01:42

Basit bir hatadan kaynaklanıyor, \ r:

Senin kodun:

   print('{}\r'.format(10-i), end="")
   # > 10,90,80

Şununla değiştirin:

   print('{} \r'.format(10-i), 
   #> 10, 9, 8
1 venky__ Aug 31 2020 at 01:44

Sorun, \rsatır başı tuşuna bastığınızda eski daktilo gibidir ve satır başlangıcına gider ve oradan bir karakter değiştirir. yani 10, ilk karakter değiştikçe 90 olur.

import time
for i in range(10):
    time.sleep(1)
    print('{:02d}'.format(10-i), end="\r")

Dolayısıyla, potansiyel çözümlerden biri genişliği sabitlemektir. burada 2 haneli yaptım