水平打印多行文本

Posted

技术标签:

【中文标题】水平打印多行文本【英文标题】:Print multiline text horizontally 【发布时间】:2022-01-15 03:18:05 【问题描述】:

在我的 python 程序中,我定义了一个字典。

并为它分配了用#符号组成的大块字母。

我需要像这样水平显示字母????

  #    ###     ###
 # #   #  #   #
#####  ###   #
#   #  #  #   #
#   #  ###     ###

我的代码应该接受输入并打印与输入对应的大字母 如果输入为 abc,则输出应如上。

代码????

dic =

dic['A'] = '''
  #  
 # # 
#####
#   #
#   #'''
dic['B'] = '''
###  
#  # 
###  
#  # 
###  '''
dic['C'] = '''
  ### 
 #   
#    
 #   
  ###'''

word = input('Input : ').upper()

for i in word :
    s = dic[i].split('\n')
    print(s[0],end='     ')
print('')
for j in word :
    print(s[1],end='     ')
print('')
for k in word :
    print(s[2],end='     ')
print('')
for m in word :
    print(s[3],end='     ')
print('')
for n in word :
    print(s[4],end='     ')

【问题讨论】:

每个字母都已经有换行符,所以它永远不会水平打印。您需要一次一行地处理整个字符串。 【参考方案1】:

将字符存储在这样的列表中:

chars = 
chars['A'] = ['  #  ',
              ' # # ',
              '#####',
              '#   #',
              '#   #']

chars['B'] = ['### ',
              '#  #',
              '### ',
              '#  #',
              '### ']

chars['C'] = ['  ###',
              ' #   ',
              '#    ',
              ' #   ',
              '  ###']

word = input('Input : ').upper()
word_chars = [chars[i] for i in word]

然后使用这个函数将word_chars中的字符组合起来:

def combineChars(chars: list[list[str]], spacing: str):
    lines = []
    for line_i in range(max([len(x) for x in chars])):
        line = []
        for char in chars:
            if len(char) > line_i:
                line.append(char[line_i])
        lines.append(spacing.join(line))
    return '\n'.join(lines)


print(combineChars(word_chars, '  '))  # in this case the chars
                                       # are 2 spaces apart 
#output:

  #    ###     ###
 # #   #  #   #
#####  ###   #
#   #  #  #   #
#   #  ###     ###

combineChars(chars, spacing) 中的第二个参数用于字符之间的间距。

还有一个简短但复杂的形式:

def combineChars(chars: list[list], spacing: str):
    return '\n'.join([spacing.join([char[line_i] for char in chars if len(char) > line_i]) for line_i in range(max([len(x) for x in chars]))])

【讨论】:

def combineChars(chars: list[list[str]], spacing: str): TypeError: 'type' object is not subscriptable combineChars(chars: list[list[str]], spacing: str): 更改为 combineChars(chars: str, spacing: str): 成功【参考方案2】:

将您的字母存储在 char 的二维数组中。 然后合并所有字母,你会得到一个二维数组。 然后逐行打印你的二维数组。

【讨论】:

以上是关于水平打印多行文本的主要内容,如果未能解决你的问题,请参考以下文章

行内和块状元素水平居中与单行或多行文本垂直居中及隐性改变display类型

关于文本水平垂直居中的一般方法

元素居中

具有多行的 WPF 水平 ListView

Android水平线性布局 - 包装元素[重复]

浮动项目的多行水平居中列表