Сокращённая запись изменения
Для целочисленного счётчика 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. Алгоритм сохранён; обобщение об операторах уточнено.