Как форматировать текст с помощью возврата каретки и новой строки?

#python #python-3.x #formatting #newline #carriage-return

#python #python-3.x #форматирование #новая строка #возврат каретки

Вопрос:

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

 A
B
  
 AA
BB
  
 AAA
BBB
  

без добавления новой строки, как будто это нормально работает только с ‘A’.
Это код только для A, и он работает.

 root@kali-linux:/tmp# cat a.py 
import time
x = "A"
while True:
    print(x, end = "r")
    x  = "A"
    time.sleep(1)
  

Теперь я добавил B.

 root@kali-linux:/tmp# cat a.py 
import time
x = "A"
y = "B"
while True:
    print(x, end = "r")
    print(y, end = "r")
    x  = "A"
    y  = "B"
    time.sleep(1)
  

К сожалению, B съедает A и увеличивается только B. Я пробовал что-то подобное, но это вызывает повторение, которого я не хочу

 import time
x = "A"
y = "B"
while True:
    print(x, end = "r")
    print('n', end='r')
    print(y, end = "r")
    x  = "A"
    y  = "B"
    time.sleep(1)
  

Есть ли какой-либо способ напечатать серию без повторения? Я получил это как ответ, но, похоже, его сложно реализовать в python3.

 r moves back to the beginning of the line, it doesn't move to a new line (for that you need n). When you have 'A' and 'B' it writes all the 'A's and then overwrites it with the 'B's.
You would need to loop through all the 'A's, then print a new line n, then loop for the 'B's. 
  

Редактировать

Оба ответа curses и coloroma были в порядке, но curses приводит к остановке терминала при попытке, за исключением, и это было немного неконфигурируемо. Coloroma был самым простым и тем ответом, который мне был нужен.

Комментарии:

1. Я обновил ответ в соответствии с вашим редактированием.

Ответ №1:

Что касается использования r и n, я не уверен, что сталкивался с таким способом. То, что я обычно использую для пользовательского вывода CLI, — это модуль colorama. Используя некоторые управляющие биты, вы можете расположить текст в любом месте экрана, где хотите, даже в разных цветах и стилях.

веб-сайт:https://pypi.org/project/colorama /

код:

 # Imports
import time
import colorama
import os

# Colorama Initialization (required)
colorama.init()

x = "A"
y = "B"

# Clear the screen for text output to be displayed neatly
os.system('cls')  #  For Microsoft Terminal, may be 'clear' for Linux

while True:
    # Position the cursor back to the 1,1 coordinate
    print("x1b[%d;%dH" % (1, 1), end="")
    # Continue printing
    print(x)
    print(y)
    x  = "A"
    y  = "B"
    time.sleep(1)
  

Комментарии:

1. Ах, вот что это было! Я вспомнил, что несколько лет назад использовал другой модуль, который был проще, чем curses для простых программ, но, хоть убейте, я не мог вспомнить название.

Ответ №2:

Здесь пригодится curses модуль.

Быстрая демонстрация:

 import time
import curses

win = curses.initscr()
for i in range(10):
    time.sleep(0.5)
    win.addstr(0, 0, "A" * i)
    win.addstr(1, 0, "B" * i)
    win.refresh()

curses.endwin()
  

curses.initscr() создает «окно», которое охватывает весь терминал. Это не обязательно, хотя

addstr(y, x, string) добавляет строку в заданное местоположение.

Вы можете найти кучу дополнительной информации о том, как работать с curses , чтобы заставить его делать именно то, что вы хотите, в документации