Замена подстрок в строке

В строке найти и заменить одну подстроку на другую. Если одинаковых подстрок несколько, заменить все.

str = "Tree, box, chair, lamp, desk, cat, dog, grass, pig, box, lamp, shelf"
print(str)

subStrOld = input("Old substring: ")
subStrNew = input("New substring: ")
lenStrOld = len(subStrOld)

while str.find(subStrOld) > 0:
    i = str.find(subStrOld)
    str = str[:i] + subStrNew + str[i+lenStrOld:]

print(str)

С комментариями:

# исходная строка
str = "Tree, box, chair, lamp, desk, cat, dog, grass, pig, box, lamp, shelf"
print(str)

# старая подстрока - заменяемая часть строки
subStrOld = input("Old substring: ")
# новая подстрока
subStrNew = input("New substring: ")
# длина старой подстроки
lenStrOld = len(subStrOld)

# Функция find() возвращает индекс первого символа
# подстроки. Если подстроки нет, то возвращает -1.
# Цикл используется на случай, если в строке
# несколько одинаковых подстрок.
while str.find(subStrOld) > 0:
    # сохранить в переменную индекс первого элемента
    # старой подстроки
    i = str.find(subStrOld)
    # Перезаписать строку: взять срез от начала до индекса,
    # добавить новую подстроки и соединить со срезом от конца
    # старой подстроки.
    str = str[:i] + subStrNew + str[i+lenStrOld:]

print(str)

Пример выполнения:

Tree, box, chair, lamp, desk, cat, dog, grass, pig, box, lamp, shelf
Old substring: box
New substring: sphere
Tree, sphere, chair, lamp, desk, cat, dog, grass, pig, sphere, lamp, shelf