Python: Синтаксический сахар
В программировании часто встречаются повторяющиеся конструкции. В Python, как и во многих других языках, есть возможность сокращать их запись. Такие упрощения называются синтаксическим сахаром. Они делают процесс написания кода короче и удобнее, сохраняя тот же результат.
Сокращенные формы присваивания
Часто требуется изменить значение переменной, прибавив или вычтя что-то, умножив или разделив на число. Базовый вариант выглядит так:
index = index + 1
count = count * 2
total = total - 5
price = price / 3Python позволяет записывать это короче, с помощью комбинированных операторов:
index += 1 # то же самое, что index = index + 1
count *= 2 # то же самое, что count = count * 2
total -= 5 # то же самое, что total = total - 5
price /= 3 # то же самое, что price = price / 3В циклах такие сокращения встречаются особенно часто. В них мы обычно меняем счетчик и накапливаем результат:
sum = 0
index = 1
while index <= 5:
sum += index # то же самое, что sum = sum + index
index += 1 # то же самое, что index = index + 1
print(sum) # => 15Без сокращений тело цикла было бы длиннее:
while index <= 5:
sum = sum + index
index = index + 1Другие операции
Такая запись работает с числами и с другими типами данных.
Для строк используется оператор конкатенации:
text = "Hello"
text += " World" # то же самое, что text = text + " World"Поддерживаемые сокращения
Существует сокращенная форма почти для всех операторов: +=, -=, *=, /=, //=, %=, **=. Все они работают по одному принципу: берут текущее значение переменной, применяют операцию и сохраняют результат в ту же переменную.
Задание
Операторы синтаксического сахара особенно удобны, когда нужно постепенно собрать итоговое значение.
Реализуйте функцию build_progress_bar(), которая принимает количество выполненных шагов и общее количество шагов, а затем возвращает строку-индикатор прогресса.
Выполненные шаги обозначаются символом #, а оставшиеся — символом -. Старайтесь не использовать встроенные методы работы со строкой в своем решении.
build_progress_bar(0, 5) # '-----'
build_progress_bar(3, 5) # '###--'
build_progress_bar(5, 5) # '#####'Вам пригодится оператор +=, чтобы постепенно собирать новую строку внутри цикла while. А также он будет полезен, чтобы управлять условием цикла.
Полезное
Ваше упражнение проверяется по этим тестам
import solution
def test1():
assert solution.build_progress_bar(0, 5) == "-----"
assert solution.build_progress_bar(3, 5) == "###--"
assert solution.build_progress_bar(5, 5) == "#####"Решение учителя откроется через:
20:00
