如何在Python中水平打印字典中的列表?
你好,我正在制作一个ASCII横幅,它要么打印一个列表字典,形成一个星号字母表。到目前为止,我成功地垂直打印了它,但水平打印时遇到了问题 有人能帮我吗 这就是我目前所拥有的 我水平打印的方法是串联分配,它打印列表的所有第一个元素,然后打印第二个元素 但似乎我的逻辑是有缺陷的,因为当我把它放在一个嵌套的循环中时,它连到了第一行如何在Python中水平打印字典中的列表?,python,list,dictionary,iteration,Python,List,Dictionary,Iteration,你好,我正在制作一个ASCII横幅,它要么打印一个列表字典,形成一个星号字母表。到目前为止,我成功地垂直打印了它,但水平打印时遇到了问题 有人能帮我吗 这就是我目前所拥有的 我水平打印的方法是串联分配,它打印列表的所有第一个元素,然后打印第二个元素 但似乎我的逻辑是有缺陷的,因为当我把它放在一个嵌套的循环中时,它连到了第一行 letter_dict = {'A': ["***** ", "* * ", "***** ", "* * ", "* * "], 'B':["*** ",
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)
嗯。你需要像点阵式打印机一样,一行一行地合成整个图像:
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)
*** ***** *****
* * * * * *
**** ***** *****
* * * * * *
**** * * * *
您可以使用
zip
使操作更干净:
for line in zip(letter_dict['L'],letter_dict['O'],letter_dict['L']):
print(*line)
* ***** *
* * * *
* * * *
* * * *
***** ***** *****
请注意,您在上面的
字母dict
中有一个错误,您在“O”中指定了“Q”。我相信您的“H”格式不正确。如果您使用的是Unix/Linux,为什么不使用“banner”调用呢?我尝试了您的解决方案,它与我的初始代码有相同的问题。在嵌套循环中,第一行的ascii列表迭代5次,然后第二行迭代5次。或者至少我认为这就是我所要做的,我也做得很好。我忽略了水平线+=“\n”。你能给我解释一下那是什么吗?