Печать строки с небольшой задержкой между символами - PullRequest
3 голосов
/ 07 января 2011

Я хочу, чтобы текст отображался так, как будто он только что набирается.Поэтому мне нужно немного задерживаться после каждого письма.

Я пытался сделать это так:

import time

text = "Hello, this is a test text to see if all works fine."
for char in text:
   print char,time.sleep(0.2),

Работает нормально, за исключением одной проблемы.Я получаю «Нет» после каждого символа.

Это вывод:

H Нет e Нет l Нет l Нет o Нет Нет, Нет Нет t Нет Нет Нет Нет Нет Нет Нет НетНет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет Нет НетНет o Нет r Нет k Нет s Нет Нет Нет Нет Нет Нет Нет Нет Нет.Нет

Я не знаю, почему это происходит.Я надеюсь, что кто-нибудь может мне помочь.

Ответы [ 7 ]

15 голосов
/ 07 января 2011
>>> import time
>>> import sys
>>> blah = "This is written slowly\n"
>>> for l in blah:
...   sys.stdout.write(l)
...   sys.stdout.flush()
...   time.sleep(0.2)
...
This is written slowly
3 голосов
/ 07 января 2011

Вы печатаете результат time.sleep(0.2), который равен None.Переместите его на следующую строку.

text = "Hello, this is a test text to see if all works fine."
for char in text:
    print char,
    time.sleep(0.2)

Конечно, у вас все еще есть проблема пробела между каждым символом, которую можно решить, заменив оператор print вызовом sys.stdout.write.

text = "Hello, this is a test text to see if all works fine."
for char in text:
    sys.stdout.write(char)
    time.sleep(0.2)
1 голос
/ 07 января 2011

эта строка:

print char, time.sleep(0.2)

декодируется как «вывести значение char, а затем вывести возвращаемое значение функции time.sleep() (которая None)».

Вы можете разбить их на отдельные строки, но поведение по умолчанию print, за которым следует запятая, оставит вас с пробелами между символами, которые вы, вероятно, не хотите. Если нет, посмотрите, как изменить поведение print, или сделайте что-то вроде этого:

>>> import sys
>>> import time
>>> for char in "test string\n":
...    sys.stdout.write(char)
...    time.sleep(0.2)
...
test string
>>>
1 голос
/ 07 января 2011

Ваш пример выводит их на отдельные строки, я думаю (по крайней мере, на окнах). Вы можете использовать печать до sys.stdout, чтобы обойти это.

import time, sys
for character in text:
    sys.stdout.write(character)
    time.sleep(0.2)
1 голос
/ 07 января 2011

Вы печатаете возвращаемое значение time.sleep (0.2), которое равно None. Поместите это на отдельной строке. Запятая после «print char» будет препятствовать печати новой строки, но будет вводить один пробел после каждого символа

Попробуйте вместо этого:

>>> import sys
>>> import time
>>> text = "Hello, this is a test text to see if all works fine."
>>> for char in text:
...     sys.stdout.write(char)
...     time.sleep(0.2)
1 голос
/ 07 января 2011

Поместите time.sleep в отдельную строку.С запятой вы также печатаете возвращаемое значение.

0 голосов
/ 07 января 2011

Спасибо всем за помощь, это мой окончательный код, я сделал случайный выбор времени для задержки, указанной Wooble:

import time
import sys
from random import randrange

text = "This is the introduction text."

for c in text:
    sys.stdout.write(c)
    sys.stdout.flush()
    seconds = "0." + str(randrange(1, 4, 1))
    seconds = float(seconds)
    time.sleep(seconds)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...