Как напечатать символы позади предыдущей строки - PullRequest
0 голосов
/ 16 декабря 2018

Проще говоря, я хотел бы знать, как это сделать:

import sys
sys.stdout.write("Hello World")

=> Hello World

#print something to go left maybe?
sys.stdout.write("Im Back Here!")

=> Im Back Here!Hello World

Надеюсь, я объяснил это достаточно хорошо, чтобы понять!Любая помощь будет очень ценится.Спасибо!

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Вы можете изменить положение курсора, используя:

sys.stdout.seek(offset[, whence])

Его описание можно найти здесь: Библиотека Python 3

Однако при использовании методов записи перезаписывается стандартный вывод, поэтому вынужно как-то запоминать вывод.
Пример решения:

import sys

out = ""

def append(s):
    global out
    sys.stdout.seek(0, 2)
    sys.stdout.write(s)
    out += s

def append_left(s):
    global out
    sys.stdout.seek(0,0)
    sys.stdout.write(s + out)
    out = s + out

append("Hello World")
append_left("Im Back Here!")

Но когда вы не перенаправляете вывод в файл stdout, поиск не возможен.Вы можете найти причину там .

0 голосов
/ 16 декабря 2018

Попробуйте:

l = []
l.append("Hello World")
l.append("Im Back Here!")
l.reverse()


print(''.join(l))

или это:

import sys
def insert_str(string, str_to_insert, index):
    return string[:index] + str_to_insert + string[index:]
s1 = "Hello World"
s2 = "Im Back Here!"

sys.stdout.write(insert_str(s2,s1,len(s2)))

и тот же результат, и код здесь: https://onlinegdb.com/BJGCJQml4

0 голосов
/ 16 декабря 2018

Это должно быть в интерактивной среде?Если да, вам придется иметь дело с любой библиотекой, которую вы используете для управления выводом.Для обычной стандартной библиотеки вы можете использовать символ возврата каретки \r для перезаписи.Поиграйте с:

import sys

msg1 = "Hello World"
msg2 = "Im Back Here!"
sys.stdout.write(msg1)
sys.stdout.write("\r{}{}".format('\r', msg2, msg1))
sys.stdout.write('\n')

Строка sys.stdout.write(msg1) производит вывод Hello World, в то время как строка sys.stdout.write("\r{}{}".format(msg2, msg1)) перемещает курсор назад к началу строки, печатает Im Back Here!, затем следует Im Back Here!,Я добавил новую строку, чтобы избежать путаницы в окне оболочки.

Если вы хотите точно такой же вывод, который вы указали, с Hello World, появляющимся дважды (первый раз, после которого следует новая строка), вы можете начать сsys.stdout.write("{}\n".format(msg1)), который будет производить вывод):

Hello World
Im Back Here!Hello World
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...