Почему печать моего типера делает новую строку для каждого символа? - PullRequest
0 голосов
/ 17 октября 2019

Я использую Python 3.X в консоли. Почему печать моего типера делает новую строку для каждого символа? Вот код:

import msvcrt as m
def wait():
    m.getch()

print(" ")
string = """
code
"""

for i in string:
    wait()
    print(str(i).replace("\n", ""))

Вот вывод:



c
o
d
e


Вот вывод, который я хочу:


code

Ответы [ 4 ]

1 голос
/ 17 октября 2019

Функция print() имеет аргумент, называемый end, который по умолчанию ... Вы догадались! '\n'.

Если вы не хотите использовать новую строку по умолчанию, вы можете сделать:

print(..., end="")

Таким образом:

string = """
code
"""

for i in string:
    print(i, end="")

Дает:


code
0 голосов
/ 17 октября 2019

Print имеет метод сброса, встроенный в Python 3.3 и выше. Если вы используете Python 3.3+, вы можете пропустить вызов sys.stdout.flush().

import msvcrt as m

def wait():
    m.getch()

print(" ")
my_string = "code"

for c in my_string:
    wait()
    print(str(c), end='', flush=True)
0 голосов
/ 17 октября 2019

Хорошо, я понял это самостоятельно. наличие этого:

print(someString, end=anything)

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

import sys
sys.stdout.flush()

Вот мой последний "вид-typer "code:

import msvcrt as m
import sys
def wait():
    m.getch()

print(" ")
stringy = """code"""

for i in stringy:
    wait()
    s = i
    print(s, end="")
    sys.stdout.flush()

Замените stringy на все, что вы хотите, чтобы пользователь печатал. Это не работает в эмуляторах, таких как PyCharm или Eclipse, если вы не работаете в режиме консоли. Для этого необходимо , чтобы находиться в консоли.

0 голосов
/ 17 октября 2019

print принимает необязательный аргумент ключевого слова end, значение которого по умолчанию равно \n'. Вам нужно изменить это на пустую строку. Также проще просто игнорировать i == "\n", чем заменять его на "".

for i in string():
    wait()
    if i != "\n":
        print(i, end='')
...