这是我目前的代码:
def print_banner(input_text, horiz_vert, letters):
'''prints string into ascii art.'''
#Prints Horizontal
if horiz_vert == "horizontal":
for i in input_text:
for j in range(6):
print(letters[i][j], end = "")
print()
#Prints Vertical
elif horiz_vert == "vertical":
for i in input_text:
for j in range(6):
print(letters[i][j])
print()
def main():
# Input text to be changed into ascii art.
input_text = input("Input your string of text here: ").lower()
# Chooses horizontal or vertical.
horiz_vert = input("Would you like horizontal or vertical? ").lower()
# Dictonary with all the accii art letters
letters = {"a": [" ___ ",
" / \ ",
" / ^ \ ",
" / /_\ \ ",
" / _____ \ ",
"/__/ \__\ "],
"b": [".______ ",
"| _ \ ",
"| |_) | ",
"| _ < ",
"| |_) |",
"|______/ "]}
print_banner(input_text, horiz_vert, letters)
# Calls Main
if __name__ == "__main__":
main()
目前如果您输入&#34; ab&#34;对于input_text并执行垂直打印选项,您将获得以下输出:
___
/ \
/ ^ \
/ /_\ \
/ _____ \
/__/ \__\
.______
| _ \
| |_) |
| _ <
| |_) |
|______/
但是当你输入水平时我想获得以下输出:
___ .______
/ \ | _ \
/ ^ \ | |_) |
/ /_\ \ | _ <
/ _____ \ | |_) |
/__/ \__\ |______/
我应该怎样对循环进行打印呢?
感谢您的帮助!
答案 0 :(得分:2)
for-loops
:...
if horiz_vert == "horizontal":
for j in range(6):
for i in input_text:
print(letters[i][j], end = "")
print()
...
<强>为什么吗
您的代码looping
通过input_text
中的每个字母,对于每封信,您printing
rows
没有new-line
字符。
这是正确的想法,两个字母只会print
出两条长线,而你想要的是它们并排在同一条线上。
您需要print
每个字母(同一行)row
,然后new-line
(向下移动row
的第二个rows
字母)。
为此,我们需要遍历row
,并为每个letters
循环遍历input_text
中的row
。对于每个字母,打印new-line
没有printing
字符。最后,在row
一个print
的末尾,我们new-line
row
以print()
移至下一个letters
。
从@ MohitC的回复中,我发现由于dictionary
中string
的定义方式存在问题。
您已定义它们,以便字母的每个row
中的length
可以是任意printing
。这适用于vertically
他们printing
,但当horizontally
他们spaces
时,这意味着他们将被抵消。
要解决此问题,确实很容易。我们可以为每个row
添加letter
到每个26
的末尾,但是说您已经定义了所有spaces
个字母,这将非常繁琐。
为了更简单地做到这一点,我们可以使用ljust
。这样,我们就可以在string
的右侧添加正确数量的length
,以使其成为某个"abc".ljust(10)
:
E.g。
"abc "
是
print
因此我们可以将其添加到代码中,以便当我们row
letter
为每个row
时,我们确保length
是某个ljust
(rows
)。因此,为简单起见,我会将length
调整为15
length
(这只是'A'
字符中最长行的...
if horiz_vert == "horizontal":
for j in range(6):
for i in input_text:
print(letters[i][j].ljust(15), end = "")
print()
...
):< / p>
wkhtmltopdf
答案 1 :(得分:0)
首先,您需要为特定字符设置所有列表字符串的大小:
letters = {"a": [" ___ ",
" / \ ",
" / ^ \ ",
" / /_\ \ ",
" / _____ \ ",
"/__/ \__\ "],
"b": [".______ ",
"| _ \ ",
"| |_) | ",
"| _ < ",
"| |_) | ",
"|______/ "]}
然后你的循环代码:
if horiz_vert == "horizontal":
for j in range(6):
for i in input_text:
print(letters[i][j], end = "")
print()
输出:
Input your string of text here: ab
Would you like horizontal or vertical? horizontal
___ .______
/ \ | _ \
/ ^ \ | |_) |
/ /_\ \ | _ <
/ _____ \ | |_) |
/__/ \__\ |______/