Создание анимации эффекта пишущей машинки для строк в Python

Так же, как в фильмах и в играх, местоположение места появляется на экране, как будто оно набирается вживую. Я хочу сделать игру о побеге из лабиринта в Python. В начале игры он дает справочную информацию об игре:

line_1 = "You have woken up in a mysterious maze"
line_2 = "The building has 5 levels"
line_3 = "Scans show that the floors increase in size as you go down"

под переменными я попытался сделать цикл for для каждой строки, подобный этому:

from time import sleep

for x in line_1:
    print (x)
    sleep(0.1)

единственная проблема с этим заключается в том, что он печатает одну букву на строку. Время его в порядке, но как я могу заставить его идти на одной линии?

4 ответов


потому что вы пометили свой вопрос python 3, я предоставлю решение python 3:

  1. изменить конечный символ печати на пустую строку: print(..., end='')
  2. добавить sys.stdout.flush() чтобы сделать его печать мгновенно (потому что выход буферизован)

окончательный код:

from time import sleep
import sys

for x in line_1:
    print(x, end='')
    sys.stdout.flush()
    sleep(0.1)

сделать его случайным также очень просто.

  1. добавить этого импорт:

    from random import uniform
    
  2. изменить sleep вызовите следующее:

    sleep(uniform(0, 0.3))  # random sleep from 0 to 0.3 seconds
    

lines = ["You have woken up in a mysterious maze",
         "The building has 5 levels",
         "Scans show that the floors increase in size as you go down"]

from time import sleep
import sys

for line in lines:          # for each line of text (or each message)
    for c in line:          # for each character in each line
        print(c, end='')    # print a single character, and keep the cursor there.
        sys.stdout.flush()  # flush the buffer
        sleep(0.1)          # wait a little to make the effect look good.
    print('')               # line break (optional, could also be part of the message)

для перебора строк, измените цикл:

for x in (line_1, line_2, line_3):

вы можете изменить символ конца строки автоматически добавляются к печати print("", end=""). Для печатиfoobar, вы могли бы сделать это:

print("foo", end="")
print("bar", end="")

С документация:

все аргументы без ключевых слов преобразуются в строки, такие как str (), и записываются в поток, разделяются sep и следуют end. И sep, и end должны быть строками; они также могут быть None, что означает использование значений по умолчанию.