ASCII字符文本对齐

时间:2018-07-31 06:40:06

标签: python python-2.7 ascii

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

这是ASCII:

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

(我知道这不是很有创意)

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

4 个答案:

答案 0 :(得分:3)

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

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

这将输出:

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

答案 1 :(得分:1)

我会

  • 获取终端窗口的大小(主要是列)-linux命令:“ stty -a” ,Windows命令:“ mode con” -并进行解析cli输出,或像下面这样:How to get Linux console window width in Python

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

  • 然后: padding_left =(terminal_columns-text-max_columns)/ 2 ,根据需要选择天花板或地板上的数字
  • 在所有文本行前添加空格,以 padding_left 值为

编辑

这是一个示例(在Linux和Windows下均可工作):

<div class="checkbox-wrapper">
    <label for="gr_1_option_4">
         <input type="radio" id="gr_1_option_4" name="group1" value=""> 
                 Sonstiges: 
          <input type="text" id="gr_1_option_4" name="group1"/>
     </label>
</div>

输出:

import shutil
import math


def str_repeat(string, length):
    return (string * (int(length / len(string)) + 1))[:length]


def print_center(lines_out):
    columns, rows = shutil.get_terminal_size()
    max_line_size = 0
    left_padding = 0

    for line in lines_out:
        if max_line_size == 0 or max_line_size < len(line):
            max_line_size = len(line)

    if columns > max_line_size:
        left_padding = math.floor((columns - max_line_size) / 2)

    if left_padding > 0:
        for line in lines_out:
            print(str_repeat(' ', left_padding) + line)


lines = [
    '  ________            ___',
    ' /_  __/ /_  ___     /   |  ________  ____  ____ _',
    '  / / / __ \/ _ \   / /| | / ___/ _ \/ __ \/ __ `/',
    ' / / / / / /  __/  / ___ |/ /  /  __/ / / / /_/ /',
    '/_/ /_/ /_/\___/  /_/  |_/_/   \___/_/ /_/\__,_/'
]

print_center(lines)

Output screenshot

答案 2 :(得分:1)

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

这是一种方法,您必须提供要居中的文本以及可用的宽度:

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)

输出:

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

答案 3 :(得分:0)

不要自己输入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):

text2art(new_string)