Python ASCII字符文本对齐

Python ASCII字符文本对齐,python,python-2.7,ascii,Python,Python 2.7,Ascii,我正在用python编写一个非常小且基本的基于文本的冒险游戏,我希望能够对齐我的标题(ASCII格式) 我已经查过了,但我要么不懂,要么就是没用 以下是ASCII码: ________ ___ /_ __/ /_ ___ / | ________ ____ ____ _ / / / __ \/ _ \ / /| | / ___/ _ \/ __ \/ __ `/ / / / / / /

我正在用python编写一个非常小且基本的基于文本的冒险游戏,我希望能够对齐我的标题(ASCII格式) 我已经查过了,但我要么不懂,要么就是没用

以下是ASCII码:

  ________            ___                         
 /_  __/ /_  ___     /   |  ________  ____  ____ _
  / / / __ \/ _ \   / /| | / ___/ _ \/ __ \/ __ `/
 / / / / / /  __/  / ___ |/ /  /  __/ / / / /_/ / 
/_/ /_/ /_/\___/  /_/  |_/_/   \___/_/ /_/\__,_/  
(我知道这不是很有创意)

我想让它与中心对齐,可能吗?

我会:

  • 获取终端窗口(主要是列)的大小-linux命令:“stty-a”,windows命令:“mode con”-并解析cli输出,或在此处执行类似操作:

  • 获取文本的最大大小(需要最多列的行)

  • 然后:padding\u left=(terminal\u columns-text-max\u columns)/2,天花板或地板根据您的需要设置数字
  • 在所有文本行前加上足够多的空格,使padding_left值为

编辑

下面是一个示例(在Linux和Windows下工作):

我想:

  • 获取终端窗口(主要是列)的大小-linux命令:“stty-a”,windows命令:“mode con”-并解析cli输出,或在此处执行类似操作:

  • 获取文本的最大大小(需要最多列的行)

  • 然后:padding\u left=(terminal\u columns-text-max\u columns)/2,天花板或地板根据您的需要设置数字
  • 在所有文本行前加上足够多的空格,使padding_left值为

编辑

下面是一个示例(在Linux和Windows下工作):


您可以逐行添加文本居中所需的空格数

这里有一种方法,您必须提供居中的文本和可用的宽度:

def align_center(text, width):
    lext = text.split('\n')
    for line in lext:
        assert len(line) < width, 'insufficient width'
    max_w = max(len(line) for line in lext)
    res = []
    for line in lext:
        res.append(' ' * ((width - max_w) // 2))
        res.append(line)
        res.append('\n')
    return ''.join(res)


text = """  ________            ___                         
 /_  __/ /_  ___     /   |  ________  ____  ____ _
  / / / __ \/ _ \   / /| | / ___/ _ \/ __ \/ __ `/
 / / / / / /  __/  / ___ |/ /  /  __/ / / / /_/ / 
/_/ /_/ /_/\___/  /_/  |_/_/   \___/_/ /_/\__,_/  """

centered = align_center(text, 90)
print(centered)

您可以逐行添加文本居中所需的空格数

这里有一种方法,您必须提供居中的文本和可用的宽度:

def align_center(text, width):
    lext = text.split('\n')
    for line in lext:
        assert len(line) < width, 'insufficient width'
    max_w = max(len(line) for line in lext)
    res = []
    for line in lext:
        res.append(' ' * ((width - max_w) // 2))
        res.append(line)
        res.append('\n')
    return ''.join(res)


text = """  ________            ___                         
 /_  __/ /_  ___     /   |  ________  ____  ____ _
  / / / __ \/ _ \   / /| | / ___/ _ \/ __ \/ __ `/
 / / / / / /  __/  / ___ |/ /  /  __/ / / / /_/ / 
/_/ /_/ /_/\___/  /_/  |_/_/   \___/_/ /_/\__,_/  """

centered = align_center(text, 90)
print(centered)

您可以使用
str.center
方法。以下代码假定屏幕宽度为80个字符:

s = '''  ________            ___                         
 /_  __/ /_  ___     /   |  ________  ____  ____ _
  / / / __ \/ _ \   / /| | / ___/ _ \/ __ \/ __ `/
 / / / / / /  __/  / ___ |/ /  /  __/ / / / /_/ / 
/_/ /_/ /_/\___/  /_/  |_/_/   \___/_/ /_/\__,_/ '''
print('\n'.join(l.center(80) for l in s.splitlines()))
这将产生:

                 ________            ___                                        
                /_  __/ /_  ___     /   |  ________  ____  ____ _               
                 / / / __ \/ _ \   / /| | / ___/ _ \/ __ \/ __ `/               
                / / / / / /  __/  / ___ |/ /  /  __/ / / / /_/ /                
               /_/ /_/ /_/\___/  /_/  |_/_/   \___/_/ /_/\__,_/                 

您可以使用
str.center
方法。以下代码假定屏幕宽度为80个字符:

s = '''  ________            ___                         
 /_  __/ /_  ___     /   |  ________  ____  ____ _
  / / / __ \/ _ \   / /| | / ___/ _ \/ __ \/ __ `/
 / / / / / /  __/  / ___ |/ /  /  __/ / / / /_/ / 
/_/ /_/ /_/\___/  /_/  |_/_/   \___/_/ /_/\__,_/ '''
print('\n'.join(l.center(80) for l in s.splitlines()))
这将产生:

                 ________            ___                                        
                /_  __/ /_  ___     /   |  ________  ____  ____ _               
                 / / / __ \/ _ \   / /| | / ___/ _ \/ __ \/ __ `/               
                / / / / / /  __/  / ___ |/ /  /  __/ / / / /_/ /                
               /_/ /_/ /_/\___/  /_/  |_/_/   \___/_/ /_/\__,_/                 

不要自己键入ASCII艺术-使用text2art:

from art import *

text2art("The Arena")
另一种选择是:

from art import *

tprint("The Arena")
要使其居中,请执行以下操作:

from art import *

string="The Arena"
new_string = string.center(90)

tprint(new_string)
或者(改用
text2art
):


不要自己键入ASCII艺术-使用text2art:

from art import *

text2art("The Arena")
另一种选择是:

from art import *

tprint("The Arena")
要使其居中,请执行以下操作:

from art import *

string="The Arena"
new_string = string.center(90)

tprint(new_string)
或者(改用
text2art
):


你能用傻话来形容吗?我才刚刚开始学习python。谢谢你,伙计,我已经决定使用另一种方法,但你的方法确实奏效了!你能用傻话来形容吗?我才刚刚开始学习python。谢谢你,伙计,我已经决定使用另一种方法,但你的方法确实奏效了!这是很久以前的事了,我最终找到了text2art或类似的东西,使用起来更容易。谢谢,尽管如此。@FrancoisvanKempen很多人更喜欢text2art,尽管我个人最喜欢的是tprint。我相信我用了colorama和tprint?我真的不记得了,这是两年前的一项评估任务。这是很久以前的事了,我最终找到了text2art或类似的东西,并使用了它,这要容易得多。谢谢,尽管如此。@FrancoisvanKempen很多人更喜欢text2art,尽管我个人最喜欢的是tprint。我相信我用了colorama和tprint?我真的不记得了,那是两年前的一次评估任务。