Добавлять конечно можно! Для этого мы в print() добавляем именованный аргумент end="", чтобы не было переноса строк и flush=true, чтобы вывод был сразу. По умолчанию стоит flush=false, и вывод текста в консоль происходит только тогда, когда строка полностью собирается. Т.е flush действует как буфер.
import time
stroke_to_typewrite = "Hello, this is a typewriter effect example"
# Появление
for letter in stroke_to_typewrite:
print(letter, end='', flush=True)
time.sleep(0.1)
# Исчезновение
for i in range(len(stroke_to_typewrite) + 1, -1, -1):
print('\r' + stroke_to_typewrite[:i], end=' ', flush=False)
time.sleep(0.1)
print('This is what will be displayed after')
Спасибо CrazyElf за дополнение! Удалять текст постепенно всё таки можно =)