Короткий разбор поведения кода со строками в Python
@python_quizРазберем этот квиз
Код:

Что здесь происходит — по шагам:
- text.strip() — удаляет пробелы в начале и в конце. Строка становится: "one,,two, ,three".
- .split(',') — разделяет по запятым, результат:
['one', '', 'two', ' ', 'three']
(обратите внимание: между двумя запятыми пустая строка, а один из элементов — строка из одного пробела).
- Генератор p for p in parts if p.strip() — оставляет только те элементы, у которых p.strip() не пустая строка. Это отбрасывает пустые элементы и элементы, состоящие только из пробелов.
Останутся: ['one', 'two', 'three'].
- '-'.join(...) — склеивает элементы дефисами: "one-two-three".
Демонстрация промежуточных значений:

Анализ возможных выводов (почему некоторые варианты неправильны)
- Вариант с двойными дефисами (например, "one--two...") предполагает, что пустые элементы остаются и при join создают пустой участок между дефисами. Но здесь пустые/пробельные элементы отфильтрованы условием if p.strip(), поэтому двойных дефисов не будет.
- Вариант, где перед "three" видна пробельная часть (" -three"), предполагает, что пробел в элементе ' ' не был отброшен или не был очищен. Однако проверка p.strip() отбрасывает элементы, состоящие только из пробелов.
- Вариант с исходной строкой без изменений отражает ситуацию, когда strip/split/join вообще не применялись — не соответствует фактическим вызовам в коде.
Вывод
- В результате выполнения кода будет напечатана строка:

Полезный паттерн
- Такой приём — strip -> split -> фильтрация пустых/пробельных элементов -> join — часто используется для аккуратной нормализации списка значений, разделённых разделителем, особенно когда нужно удалить лишние запятые, пустые поля и пробелы.