strip, split и join в Python: как получить неожиданный пробел в конце
@python_quizРазберем этот квиз
Коротко: один вызов strip(), потом split(',') и затем join('-') — и в результате в конце строки останется пробел. Ниже разберём код по шагам, покажем вывод и проанализируем варианты ответов.
Исходный код

Пошаговый разбор
- Исходная строка:
- Содержит два пробела в начале, затем текст с запятыми и в конце один пробел перед закрывающей кавычкой:
" ,a,,b, ,"
- text.strip()
- strip() убирает только крайние пробелы (с начала и конца строки).
- После strip() строка станет: ",a,,b, ," — ведущие пробелы и завершающий пробел удалены, но обратите внимание: там всё ещё есть пробел в виде элемента после последней запятой (это не крайний пробел строки, он является частью последнего элемента).
- .split(',')
- Разбиение по запятой создаёт список элементов между запятыми.
- При смежных или крайних запятых появляются пустые строки.
- Результат split:
['', 'a', '', 'b', ' '] — последний элемент содержит один пробел (это символ, который был между последней запятой и концом до strip).
- '-'.join(parts)
- join вставляет дефис между элементами списка.
- Пустые элементы порождают соседние дефисы.
- Последний элемент — не пустая строка, а строка из одного пробела, поэтому в конце результата окажется пробел.
- Конечная строка: "-a--b- " (обратите внимание на пробел в конце).
Демонстрация с видимым представлением вывода
Чтобы явно увидеть пробел в конце, выведем repr строк:

Вывод:
- Первый print напечатает: -a--b- (последний пробел не видно на экране).
- Второй print покажет: '-a--b- ' — видно, что в конце есть пробел.
Анализ предложенных вариантов
Варианты, которые были предложены, отличаются тонко:
- "-a--b- -" — содержит в конце " -": то есть дефис после пробела; это не совпадает с реальным выводом (в реальном выводе последним символом является пробел, а до него — дефис, но после пробела дефиса нет).
- "a--b- -" — отсутствует начальный дефис (не соответствует).
- "-a--b-" — похожо, но лишён завершающего пробела (не совпадает).
- "None of the above" — если рассматривать точное совпадение символов и пробелов, этот вариант верный, так как ни один из первых трёх точно не повторяет выходную строку с завершающим пробелом.
Важно: визуально отличия могут быть незаметны (пробел на конце не виден), поэтому при подобных задачах лучше всегда сравнивать repr() или выводить длину/коды символов.
Полезные замечания и способы обработки
- Чтобы убрать пустые элементы после split, можно отфильтровать список:

- Если нужно избавиться от пробелов внутри элементов:

- Если требуется убрать финальный пробел в последнем элементе, можно дополнительно rstrip():

- Для наглядной отладки строк используйте repr() или модуль pprint.
Вывод
Комбинация strip(), split(',') и join('-') даёт неожиданный результат из‑за пустых элементов при split и наличия элемента, состоящего из пробела. Всегда проверяйте, какие элементы появляются после split, особенно при работе с разделителями рядом друг с другом или с пробелами между разделителями.