Как подчеркнуть текст, используя печать и формат - PullRequest
1 голос
/ 25 марта 2020

У меня есть довольно простой вопрос c python. Я пытаюсь подчеркнуть все строки в следующем коде. У меня есть следующий код.

print("\u0332{:<20} {:^5} {:>6} {:>10} {:>10}\u0332".format("Name", "Hours Worked", "Hourly Rate", "Taxes Owed", "Net Pay"))

Выдает это:

_Name                 Hours Worked Hourly Rate Taxes Owed    Net Pay̲

Как получить, чтобы все было подчеркнуто?

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Используя \u0332, я бы определил функцию

from itertools import repeat, chain


def underline(s):
    return ''.join(chain.from_iterable(zip(s, repeat("\u0332"))))

Затем запись

heads = ["Name", "Hours Worked", "Hourly Rate", "Taxes Owed", "Net Pay"]
print("{:<20} {:^5} {:>6} {:>10} {:>10}".format(*map(underline, heads)))

underline превращает строку типа "Name" в строку "N\u0332a\u0332m\u0332e\u0332", то есть он добавляет символ подчеркивания объединения после каждого символа строки для подчеркивания.


Если ваш терминал поддерживает управляющие коды ANSI, рассмотрите что-то вроде

def underline(s):
  return f'\x1b[4m{s}\x1b[24m'

вместо этого. Это просто включает режим подчеркивания вашего терминала во время печати заданной строки, а не требует поддержки шрифтов для композиции глифов Unicode.

0 голосов
/ 25 марта 2020

Попробуйте это.

print("\u0332".join('{:<20} {:^5} {:>6} {:>10} {:>10}'.format("Name", "Hours Worked", "Hourly Rate", "Taxes Owed", "Net Pay")))

Редактировать: Для каждого слова, простое понимание списка должно сделать.

words = ["Name", "Hours Worked", "Hourly Rate", "Taxes Owed", "Net Pay"]
words = ["\u0332".join(word+' ')[:-1] for word in words]
print('{:<20} {:^5} {:>6} {:>10} {:>10}'.format(*words))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...