Я создал простую программу на Python, которая будет рассчитывать до 10

Я пытаюсь добиться, чтобы программа удалила предыдущий номер и напечатала новый номер.

Это код, который я создал:

import sys
import time
for i in range(10):
    text = "\r" + str(i)
    sys.stdout.write(text)
    sys.stdout.flush()
    time.sleep(1)

Какие выводы:

0123456789

Изменение кода на "\r" после str(i) также не сработало

import sys
import time
for i in range(10):
    text = str(i) + "\r"
    sys.stdout.write(text)
    sys.stdout.flush()
    time.sleep(1)

Что также привело к:

0123456789

Я искал его, чтобы подсчитать и отобразить в конце только 9, однако он не перезаписывает предыдущие цифры

< Сильный > Edit:

Я использую Windows, Python3

Изменить 2 .

Как переписать предыдущую печать в stdout в python? Не дает мне рабочего ответа, все равно не делает то, что я хочу

Поэтому из-за моих превосходных рассуждений это не дубликат: P

0
Ruler Of The World 30 Авг 2017 в 14:23

6 ответов

Лучший ответ

В качестве альтернативы вы можете очистить все окно, используя os.system("cls")

3
Balázs Kovacsics 30 Авг 2017 в 12:10

Есть некоторые контрольные символы, принятые виртуальными терминалами. Одним из них является '\ b', который перемещает каретку на одно место назад. Этот вариант также принят в Windows, и я буду использовать его в своем примере ниже. Терминалы Unix принимают гораздо больше элементов управления, включая изменение цвета и многое другое.



from time import sleep
import sys, os

def clear ():
    os.system("cls" if sys.platform.startswith("win") else "clear")

clear()

s = "1"
sys.stdout.write(s)
for x in range(2, 21):
    sleep(1)
    # Return carret to beginning of line:
    l = len(s)
    s = l*"\b"
    sys.stdout.write(s)
    # Clear line (just in case):
    s = l*" "
    sys.stdout.write(s)
    # Return to the beginning again:
    s = l*"\b"
    sys.stdout.write(s)
    # Write over new text:
    s = str(x)
    sys.stdout.write(s)

0
Dalen 30 Авг 2017 в 13:36

Я считаю, что ваш код должен работать отлично. Проблема должна заключаться в том, что вы используете терминал Windows . Попробуйте использовать Linux. Большая часть кода не работает в Windows. Вы можете обратиться по этой ссылке, чтобы узнать, почему вы должны прекратить использование питон на винде.

Это также альтернативный код, который вы можете попробовать.

    import time
    for i in range(10):
        text = str(i)
        print(text,end = "\r")
        time.sleep(1)

-1
Adithya Moorthy 30 Авг 2017 в 12:13

Почему бы не использовать стандартную печать Python? Althougth, указанный на многих экранах отладчика, это, как правило, не работает. В терминале (Ubuntu) это делает

import time

for i in range (10):
    print(i, end='\r')
    time.sleep(1)

Возможно, для stdout что-то тоже существует, но в этом случае я обычно использую печать python3

-1
davy gillebert 30 Авг 2017 в 12:13

Используйте параметр end, чтобы указать «\ r» в качестве окончания строки.

import time
for i in range(10):
    print(i, end="\r")
    time.sleep(1)
0
paullb 28 Июн 2019 в 03:59

Я бы сделал это так:

for x in range(10):
    print("{}".format(x), end="\r")
-1
Eduardo 30 Авг 2017 в 11:31