【问题标题】:Python: String formatter to get underlined headlinePython:字符串格式化程序以获得带下划线的标题
【发布时间】:2019-07-30 15:06:12
【问题描述】:

为了构造我的控制台输出,我想打印一些信息,我想从一个带下划线的标题开始。 但是如何在不创建额外变量的情况下很好地做到这一点呢?

现在我是这样做的:

print("{:s}\n{:s}\n".format("This is an underlined headline.", len("This is an underlined headline.") * "-"))

什么给了我想要的输出:

This is an underlined headline.
-------------------------------

但是那个代码很糟糕。有没有更好的格式字符串来实现这一点?

print("{0:s}\n?????\n".format("This is an underlined headline.", "-"))

谢谢你:)

【问题讨论】:

  • 你所拥有的对我来说并不那么冗长,特别是如果你存储字符串,例如s = "This is an underlined headline."; print('{}\n{}'.format(s, len(s)*'-'))
  • 正如@Chris_Rands 提到的,它并不是那么冗长。您可以调用 print 两次以使其更具可读性,但这需要变量存储,这也没什么大不了的
  • 是的,但是为 1 次打印创建一个新变量?如果我有 5 个部分,那么我需要 5 个新变量怎么办?我希望有更好的东西。
  • @Max16hr 如果你想做同样的事情 5 次,写一个函数。
  • 如果您不想创建其他名称,请使用print((lambda s: '%s\n%s' % (s, '-' * len(s)))("This is an underlined headline."))

标签: python string printing format python-3.7


【解决方案1】:

也许可以尝试使用 ANSI 转义序列

class Format:
    end = '\033[0m'
    underline = '\033[4m'

print(Format.underline + 'Your text here' + Format.end)

它将打印出带下划线的文本,对于整个 ANSI 转义序列文档,请单击 here

【讨论】:

  • 我已经尝试过了,但它只给了我[0mThis is an underlined headline.[4m
  • @Max16hr 那是因为您的终端/控制台不理解 ANSI 转义序列。 Vista 和最近的 Windows 10 更新之间的大多数 Windows 版本都没有。
  • 可能是因为我使用的是 Eclipse。所以也许有一些设置可以让控制台理解 ANSI。
  • 我从未真正使用过 Eclipse。但是this 可能会有所帮助
  • 啊!在首选项中,我必须禁用“使用 Windows 颜色映射”。现在它正在工作! :)
【解决方案2】:

有一个 unicode 字符 '\u0332',COMBINING LOW LINE*,它充当字符串中它前面的字符的下划线。所以你可以试试:

print('{:s}'.format('\u0332'.join('This is an underlined headline.')))

哪个应该产生一个带下划线的字符串:

T̲h̲i̲s̲ ̲i̲s̲ ̲a̲n̲ ̲u̲n̲d̲e̲r̲l̲i̲n̲e̲d̲ ̲h̲e̲a̲d̲l̲i̲n̲e̲。

但是,输出的外观可能取决于呈现输出的应用程序以及它使用的字体。我的浏览器生成一个带下划线的字符串,我的 (Linux) 终端将其显示为每个字符后跟一个下划线。

*还有'\u0333',COMBINING DOUBLE LOW LINE,用于双下划线。

【讨论】:

  • 今天再试一次,终端根本不再显示下划线。我不确定这是否是字体问题,或者我最初写答案时是否使用了不同的计算机。
猜你喜欢
  • 1970-01-01
  • 2015-12-08
  • 2014-11-02
  • 1970-01-01
  • 2012-01-29
  • 2013-12-30
  • 1970-01-01
  • 2011-11-02
相关资源
最近更新 更多