DamiRocK

Python: += и построение строки индикатора прогресса

Собираем ###– через while и составное присваивание. Проверяем число выполненных шагов и уточняем, где += не полностью эквивалентно обычному присваиванию.

Сокращённая запись изменения

Для целочисленного счётчика index += 1 удобно выражает прибавление единицы. Для строкового накопителя result += "#" добавляет символ к значению и связывает имя с результатом.

Задание источника

Создайте строку длины total, где первые completed шагов показаны решётками, остальные — дефисами. Используйте цикл и +=:

def build_progress_bar(completed: int, total: int) -> str:
    index = 0
    result = ""
    while index < total:
        if index < completed:
            result += "#"
        else:
            result += "-"
        index += 1
    return result

Проверка трёх состояний

build_progress_bar(0, 5) возвращает "-----", (3,5)"###--", (5,5)"#####". При total=0 результат пустой.

Естественная область задания — целые 0≤completed≤total. Исходный код не отклоняет нарушение этой области: completed>total даст все решётки, отрицательное completed — все дефисы при положительном total. Это следствие сравнений, а не самостоятельное правило обработки ошибок.

Нюанс составного присваивания

В источнике += описано как универсальная замена x = x + y. Для показанных чисел и строк результаты согласованы, но для изменяемых объектов возможны различия. Например, список при += может измениться на месте, что заметят другие ссылки на него; обычный плюс может создать новый список.

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

Не интерфейс реального прогресса

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

Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Алгоритм сохранён; обобщение об операторах уточнено.

Reading preferences

Appearance
Contrast
More options

Saved only in this browser. Your device’s reduced-motion setting is always respected. Browser zoom works throughout the site.