Как создать анимированную загрузку с эффектом многоточия?

Здравствуйте! Мне нужна анимация, похожая на следующую: 
- Restarting 
- Restarting. 
- Restarting.. 
- Restarting... 

Однако я хочу, чтобы это выглядело как одно сообщение, которое "редактируется" в процессе выполнения. В текущем варианте у меня получается нечто подобное: 
<pre><code class="python">&lt;print("Restarting")
    time.sleep(0.5)
    print("Restarting.")
    time.sleep(0.5)
    print("Restarting..")
    time.sleep(0.5)
    print("Restarting...")
    time.sleep(0.5)
    print("Restarting")
    time.sleep(0.5)
    print("Restarting.")
    time.sleep(0.5)
    print("Restarting..")
    time.sleep(0.5)
    print("Restarting...")
    time.sleep(0.5)
    print("Successful!")&gt;</code></pre>
  • 12 октября 2024 г. 2:52
Ответы на вопрос 2
Чтобы создать анимацию загрузки с эффектом многоточия в виде одного сообщения, которое "редактируется" в процессе выполнения, вам нужно использовать `end` в функции `print` и управлять выводом с помощью `\r` (каретка возврата, чтобы переместить курсор на начало строки). Вот пример реализации на Python:

```python
import time
import sys

def animated_loading(message, duration):
    for i in range(duration * 2):  # Умножаем на 2 для плавности
        num_dots = i % 4  # Используем остаток от деления на 4, чтобы циклически добавлять точки
        dots = '.' * num_dots  # Генерируем нужное количество точек
        # Используем carriage return "\r" для обновления строки
        print(f'\r{message}{dots}', end='', flush=True)
        time.sleep(0.5)  # Задержка

    print(f'\r{message}... Done!')  # Завершаем сообщение

# Пример использования
animated_loading("Restarting", 6)
```

### Как это работает:

1. **Цикл**: Мы используем цикл, который будет выполняться долгое время, в зависимости от продолжительности загрузки (arg `duration`).
   
2. **Количество точек**: Используя `i % 4`, мы получаем количество точек от 0 до 3, и с помощью `'.' * num_dots` создаем строку с нужным количеством точек.

3. **Обновление строки**: `\r` переводит курсор обратно в начало строки, а параметр `end=''` указывает не добавлять новый символ переноса строки. `flush=True` заставляет Python немедленно обновить вывод.

4. **Завершение**: После завершения анимации мы выводим сообщение о завершении.

Таким образом, вы получите анимированный эффект загрузки, который будет выглядеть как одно обновляющееся сообщение с многоточиями.
Похожие вопросы