Будет напечатано python. upper() возвращает новую строку, но результат каждого вызова здесь игнорируется; исходная строка txt не меняется и ошибки присваивания нет.
Модификация строки внутри цикла
Будет напечатано python. upper() возвращает новую строку, но результат каждого вызова здесь игнорируется; исходная строка txt не меняется и ошибки присваивания нет.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В приведённом фрагменте Python‑кода пытаются изменить символы строки 'python' в ходе итераций. Какой результат будет напечатан? Варианты ответов:
- ошибка
- Python
- PYTHON
- python
txt = 'python'
for i in range(len(txt)):
txt[i].upper()
print(txt)
Ответ
Будет напечатано python. upper() возвращает новую строку, но результат каждого вызова здесь игнорируется; исходная строка txt не меняется и ошибки присваивания нет.
В отличие от txt[i] = ..., этот код ничего не пытается записать в неизменяемую строку. На каждой итерации создаётся результат преобразования отдельного символа, который сразу теряется.
Чтобы изменить значение переменной, нужно сохранить результат:
txt = 'python'
txt = txt.upper()
print(txt) # PYTHON
Цикл для этой задачи не нужен. Важно различать изменение существующего объекта и присваивание имени ссылки на новое строковое значение.