Сочетание текстовой переноски с изменением цвета одного слова в тексте - PullRequest
0 голосов
/ 16 мая 2018

Я пишу текстовую игру на Python.Я написал функцию, которая берет список слов и меняет их цвет, оставляя остальные белыми.

def highGreen(text, words):
    textWords = text.split(" ")
    highlight = set(textWords).intersection(words)
    for word in textWords:
        if word in highlight:
            print("\033[32m", end="")
            print(word, end=" ")
        else:
            print("\033[0m", end="")
            print(word, end=" ")

Моя проблема в том, что я не могу совместить эту функцию с textwrap.wrap или.fill, поэтому при печати на консоли слова разбиваются в случайных местах.

Я пробовал:

text = "This bed is super uncomfortable."
for line in textwrap.wrap(text, 80):
    highGreen(line, ["bed"])

, но все равно печатает все в одной строке.

Раскраска выполняется таким странным образом, потому что больше ничего, что я пробовал, не работало в консоли Windows 10 / PyCharm.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Во-первых, ваш text не имеет длины 80 символов (на самом деле это всего лишь 32), поэтому он все равно поместится на одной строке. Давайте изменим это на 20 для этого примера.

Во-вторых, Ваш текст будет разбит на куски 20 символов, вы просто не печатаете никаких новых строк. print() обычно добавляет их автоматически, но поскольку вы переопределяете это с помощью аргумента end=, новая строка никогда не печатается.

Мы можем исправить это, добавив пустой оператор print() после вызова highGreen. (Помните, print() автоматически печатает новую строку, если вы не указали end= arg)

Пример:

text = "This bed is super uncomfortable."
for line in textwrap.wrap(text, 20):
    highGreen(line, ["bed"])
    print() # add this to print newline

Выход:

This bed is super 
uncomfortable.

(bed печатает зеленый, я просто не уверен, как скопировать это в StackOverflow)

0 голосов
/ 16 мая 2018

textwrap, вероятно, сбит с толку контрольными кодами (результат тот же, даже если текст длиннее значения переноса). Возможно, вы захотите попробовать ansiwrap.

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