Как сделать индикатор прогресса терминала, используя python?
Я пытался сделать это через .replace(), цикл сделал на абум
import time
slashS = "/"
refresh1 = slashS.replace("/", "-")
refresh2 = refresh1.replace(refresh1, "\\")
refresh3 = refresh2.replace(refresh2, slashS)
while True:
print(refresh3, end="")
time.sleep(1)
это код должен писать "/" потом удалять, (но незаметно) писать "-", снова удалять, писать "\" и так по кругу.
Но программа которую я написал это всё делает, но "в уме", поэтому она выводит просто "/", а ещё она не остается на том же месте, а переходит на следующее место для символа.
при быстром стирании и печатании, это должно быть похоже на кружок
Ответы (2 шт):
метод replace вам тут никак не поможет. алгоритм такой - выводите первый символ, ждете, выводите символ backspace (забой предыдущего символа), выводите следующий.
Ниже код для 100 циклов, если хотите, можете сделать его бесконечным:
UPDATE: справедливое дополнение от @CrazyElf - включить параметр flush
import time
from itertools import cycle
syms = ["/", "-", "\\"]
c = cycle(syms)
x = 0
while x < 100:
print(next(c), end="", flush=True)
time.sleep(.1)
print("\b", end="")
x+=1
Если я вас правильно понял, то попробуйте так, только придумайте, как выходить из цикла:
while True:
print(f'\r/', end='')
print(f'\r-', end='')
print(f'\r\\', end='')
Или так:
import sys
while True:
sys.stdout.write("/" * 1)
sys.stdout.flush()
sys.stdout.write("\b")
sys.stdout.write("-" * 1)
sys.stdout.flush()
sys.stdout.write("\b")
sys.stdout.write("\\" * 1)
sys.stdout.flush(
sys.stdout.write("\b")
Что больше нравится. Только в PyCharm вы полноценного вращения не увидите. Запускайте в терминале или командной строке.