【问题标题】:How to print lists in a dictionary horizontally in Python?如何在 Python 中水平打印字典中的列表?
【发布时间】:2013-10-24 19:11:54
【问题描述】:

您好,我正在制作一个 ASCII 横幅,它可以打印一个列表字典,该字典构成一个星号字母表。到目前为止,我成功垂直打印它,但我无法水平打印它。

有人可以帮帮我吗?

这是我目前所拥有的。

我的水平打印方法是连接分配,打印列表的所有第一个元素,然后打印出第二个。

但似乎我的逻辑有缺陷,因为当我将它放在嵌套循环中时,它会更多地连接到第一行

letter_dict = {'A':
["***** ",
"*   * ",
"***** ",
"*   * ",
"*   * "],
'B':["***   ",
     "*   * ",
     "****  ",
     "*   * ",
     "****  "],
'C':["***** ",
     "*     ",
     "*     ",
     "*     ",
     "***** "],
'D':["****  ",
     "*   * ",
     "*   * ",
     "*   * ",
     "****  "],
'E':["***** ",
     "*     ",
     "***** ",
     "*     ",
     "***** "],
'F':["***** ",
     "*     ",
     "***** ",
     "*     ",
     "*     "],
'G':["***** ",
     "*     ",
     "* *** ",
     "* * * ",
     "***** "],
'H':["*     ",
     "*     ",
     "***** ",
     "*     ",
     "*     "],
'I':["***** ",
     "  *   ",
     "  *   ",
     "  *   ",
     "***** "],
'J':["***** ",
     "  *   ",
     "  *   ",
     "  *   ",
     "***   "],
'K':["*   * ",
     "*  *  ",
     "* *   ",
     "*  *  ",
     "*   * "],
'L':["*     ",
     "*     ",
     "*     ",
     "*     ",
     "***** "],
'M':["*   * ",
     "* * * ",
     "*   * ",
     "*   * ",
     "*   * "],
'N':["*     ",
     "**    ",
     "* *   ",
     "*  *  ",
     "*   * "],
'O':["***** ",
     "*   * ",
     "*   * ",
     "*   * ",
     "***** "],
'P':["***** ",
     "*   * ",
     "***** ",
     "*     ",
     "*     "],
'O':["***** ",
     "*   * ",
     "*   * ",
     "* **  ",
     "*** * "],
'R':["***** ",
     "*   * ",
     "***** ",
     "*  *  ",
     "*   * "],
'S':["***** ",
     "*     ",
     "***** ",
     "    * ",
     "***** "],
'T':["***** ",
     "  *   ",
     "  *   ",
     "  *   ",
     "  *   "],
'U':["*   * ",
     "*   * ",
     "*   * ",
     "*   * ",
     "***** "],
'V':["*   * ",
     "*   * ",
     "*   * ",
     " * *  ",
     "  *   "],
'W':["*   * ",
     "*   * ",
     "*   * ",
     "* * * ",
     " * *  "],
'X':["*   * ",
     " * *  ",
     "  *   ",
     " * *  ",
     "*   * "],
'X':["*   * ",
     " * *  ",
     "  *   ",
     "  *   ",
     "  *   "],
'Z':["***** ",
     "   *  ",
     "  *   ",
     " *    ",
     "***** "]}


def print_banner(str_input, horizontal):

    str_input = str_input.upper()

    if horizontal != True:
        for i in range(len(str_input)):
            for j in range(6):
                print(letter_dict[str_input[i]][j])

    else:
        horizontal_line = ""


        for m in range(len(str_input)):

            horizontal_line += letter_dict[str_input[m]][0]

        print(horizontal_line)

print_banner("ABCD", True)

【问题讨论】:

  • 如果您使用的是 Unix/Linux,为什么不为此使用“横幅”调用?

标签: python list dictionary iteration


【解决方案1】:

嗯。您需要逐行编写整行,就像点阵打印机一样:

else:
     for line in range(5):               # Each letter is 5 lines high
          for m in str_input:           
               horizontal_line += letter_dict[m][line]
          horizontal_line += "\n"
     print(horizontal_line)

示例运行:

In [7]: str_input = "BAR"

In [8]: horizontal_line = ""

In [9]: %paste
     for line in range(5):               # Each letter is 5 lines high
          for m in str_input:
               horizontal_line += letter_dict[m][line]
          horizontal_line += "\n"
     print(horizontal_line)

***   ***** *****
*   * *   * *   *
****  ***** *****
*   * *   * *  *
****  *   * *   *

【讨论】:

  • 我试过你的解决方案,我的初始代码也有同样的问题。在嵌套循环中,第一行的 ascii 列表迭代 5 次,然后第二行迭代 5 次。或者至少我认为是这样的
  • 好的,我也搞定了。我忽略了水平线+ =“\ n”。你觉得你能向我解释一下这是做什么的吗?
【解决方案2】:

您可以使用zip 使操作更简洁:

for line in zip(letter_dict['L'],letter_dict['O'],letter_dict['L']):
    print(*line)

*      *****  *     
*      *   *  *     
*      *   *  *     
*      *   *  *     
*****  *****  ***** 

请注意,您在上面的letter_dict 中有一个错误,您将“Q”分配给“O”中的内容。而且我相信您的“H”格式不正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2013-02-16
    • 2017-08-20
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多