Python 3.2 для цикла

спасибо, что нашли время, чтобы помочь мне. В прошлом семестре я изучал Python 3.2, так что мои знания не более чем новички. Я работаю в Windows 7, использую Python 3.2 и Python IDLE.

Я использую цикл for для печати серии строк в виде прокрутки. Я имею в виду, что IDLE будет печатать строку буква за буквой. Ниже приведен код, который я использую.

import os, sys, time

message=('Enter string in here. It will print what is in here letter by letter.')

for line in message:
    print(line,end='')
    sys.stdout.flush()
    time.sleep(0.03)

Мой вопрос: есть ли способ распечатать всю строку (сообщение), если пользователь нажмет «ввод» в любое время в течение всего времени печати строки. Таким образом, даже если пользователь нажмет «ввод» в начале; будет напечатана вся строка.

Еще раз я хотел бы поблагодарить вас за то, что нашли время, чтобы помочь мне. Это очень ценится.


person dhc    schedule 08.05.2012    source источник


Ответы (1)


Ваш код немного сбивает с толку, потому что ваш цикл говорит о строках, но не работает с ними.

message=('Enter string in here. It will print what is in here letter by letter.')

Таким образом, сообщение представляет собой строку

for line in message:

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

Есть ли способ напечатать всю строку (сообщение), если пользователь нажмет «ввод» в любое время в течение всего времени печати строки. Таким образом, даже если пользователь нажмет «ввод» в начале; будет напечатана вся строка.

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

Если это не то, о чем вы спрашиваете, то я думаю, вам нужно переформулировать свой вопрос.

person Paul S    schedule 08.05.2012