2011-01-07 2 views
2

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

Я пытался сделать это таким образом:

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), 

Он работает отлично, за исключением одной проблемы. После каждого персонажа я получаю «Нет».

Это выход:

Н Отсутствует е Отсутствует л Отсутствует л Отсутствует о None, Нет Нет т Отсутствует ч Отсутствует я Отсутствует S Нет Нет я Отсутствует S Нет Нет Нет Нет т Отсутствует е Нет ев Отсутствует т None None t None e None x None t None None t None o None None s None e None e None None i None f None None a None l None l None None w None o None r None k None s None None f None i None n Нет e Нет. Нет

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

+0

Почему вы печатаете значение 'time.sleep (0.2)'? –

ответ

12
>>> 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 
+0

+1 для 'flush()'. Конечно, если вы действительно хотите, чтобы он отображался набранным, время пауз должно быть случайным; кто типа в совершенно правильном темпе? – geoffspear

+0

Зависит от машинистки. Домашние клавишные сенсорные машинисты: задержка будет больше между теми же клавишами пальца ... и, вероятно, кратчайшим между чередующимися руками. Более длинная задержка для переключения и т. Д. Я начал что-то кодировать, но потом решил вернуться к работе :) – MattH

+0

+1 для флеша, который я забыл. – bgporter

1

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

3

Вы печатаете результат 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

Вы печатаете возвращаемое значение 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) 
+0

MattH избил меня до удара, а также правильно включил вызов flush(). –

1

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

import time, sys 
for character in text: 
    sys.stdout.write(character) 
    time.sleep(0.2) 
1

эта линия:

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 
>>> 
0

Спасибо всем за вашу помощь, это мой последний код, я сделал случайный выбор времени для задержки, как упомянуто 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) 
Смежные вопросы