Python 如何正确打印ASCII艺术?
我正在制作一个基于文本的rpg/冒险游戏,我想添加一些ASCII艺术。我对多行字符串使用了三个引号,如下所示:Python 如何正确打印ASCII艺术?,python,Python,我正在制作一个基于文本的rpg/冒险游戏,我想添加一些ASCII艺术。我对多行字符串使用了三个引号,如下所示: print(""" /\ /\ /\ /\ /**\ /**\
print("""
/\ /\ /\ /\
/**\ /**\ /**\ /**\
/****\ /\ /\ /****\ /\ /****\ /\ /\ /****\ /\
/ \ /**\ / \ / \ /**\ / \ /**\ / \ / \ /**\
/ /\ / \ / \ / /\ / \ /\ / /\ / \ / \ / /\ / \
/ / \ / \/ \/ / \ / \ / \ / / \ / \/ \/ / \ / \
/ / \/ /\ \ / / \/ /\ \/ \/ / \/ /\ \ / / \/ /\ \
/ / \/ \/\ \ / / \/ \/\ \ / / \/ \/\ \ / / \/ \/\ \
__/__/_______/___/__\___\__/__/_______/___/__\___\___/__/_______/___/__\___\__/__/_______/___/__\___\_
""")
理想情况下,这就是我运行程序时的样子
但是,它看起来是这样的,一点也不理想,看起来非常凌乱:
我想知道是否有人能为我指出解决这个问题的正确方向。提前谢谢 您应该输入字符串,如下所示:
# v
print(r"""
/\ /\ /\ /\
/**\ /**\ /**\ /**\
/****\ /\ /\ /****\ /\ /****\ /\ /\ /****\ /\
/ \ /**\ / \ / \ /**\ / \ /**\ / \ / \ /**\
/ /\ / \ / \ / /\ / \ /\ / /\ / \ / \ / /\ / \
/ / \ / \/ \/ / \ / \ / \ / / \ / \/ \/ / \ / \
/ / \/ /\ \ / / \/ /\ \/ \/ / \/ /\ \ / / \/ /\ \
/ / \/ \/\ \ / / \/ \/\ \ / / \/ \/\ \ / / \/ \/\ \
__/__/_______/___/__\___\__/__/_______/___/__\___\___/__/_______/___/__\___\__/__/_______/___/__\___\_
""")
这是因为反斜杠“\”是Python字符串中的一个字符。您应该创建字符串,如下所示:
# v
print(r"""
/\ /\ /\ /\
/**\ /**\ /**\ /**\
/****\ /\ /\ /****\ /\ /****\ /\ /\ /****\ /\
/ \ /**\ / \ / \ /**\ / \ /**\ / \ / \ /**\
/ /\ / \ / \ / /\ / \ /\ / /\ / \ / \ / /\ / \
/ / \ / \/ \/ / \ / \ / \ / / \ / \/ \/ / \ / \
/ / \/ /\ \ / / \/ /\ \/ \/ / \/ /\ \ / / \/ /\ \
/ / \/ \/\ \ / / \/ \/\ \ / / \/ \/\ \ / / \/ \/\ \
__/__/_______/___/__\___\__/__/_______/___/__\___\___/__/_______/___/__\___\__/__/_______/___/__\___\_
""")
这是因为反斜杠“\”是Python字符串中的一个字符。代码中的主要问题是,行尾的
\
被解释为行的延续,因此下一行只是连接到上一行
可以通过在反斜杠后面的行末尾添加任何字符来避免这种情况,例如空格(因为只有当反斜杠是行中的最后一个字符时才会触发行继续)
另一种解决方案是使用原始字符串,以“r”“”…
开头。如中所述:
具体来说,原始文字不能以单个反斜杠结尾(因为
反斜杠将转义以下引号字符)
单个反斜杠后跟换行符被解释为
两个字符作为文字的一部分,而不是作为行的延续。(强调我的)
这也将防止任何可能以反斜杠开头的转义序列被解释为反斜杠。代码中的主要问题是,行尾的
\
被解释为行的延续,因此下一行只是连接到上一行
可以通过在反斜杠后面的行末尾添加任何字符来避免这种情况,例如空格(因为只有当反斜杠是行中的最后一个字符时才会触发行继续)
另一种解决方案是使用原始字符串,以r”“…
开头。如下列文件所述:
具体来说,原始文字不能以单个反斜杠结尾(因为
反斜杠将转义以下引号字符)。也请注意
单个反斜杠后跟换行符被解释为
两个字符作为文字的一部分,而不是作为行的延续。(强调我的)
这也将防止任何以反斜杠开头的潜在转义序列被解释为反斜杠。除了其他答案之外,另一个可能会搞乱ASCII艺术的东西是缩进,例如:
print(““”这三行
应该开始
在同一地方(“))
将输出:
these 3 lines
should start
in the same place
these 3 lines
should start
in the same place
要解决此问题,您需要执行以下操作:
print(““”这三行
应该开始
在同一地方(“))
但是如果print语句缩进,它仍然不起作用
范围(1)内的i的:
打印这三行(“”)
应该开始
在同一地方(“))
将输出:
these 3 lines
should start
in the same place
these 3 lines
should start
in the same place
要解决此问题,字符串应始终从行的开头开始,而不考虑缩进,如下所示:
范围(1)内的i的:
打印这三行(“”)
应该开始
在同一地方(“))
但是这很难看。除了其他答案之外,另一个可能会搞乱ASCII艺术的东西是缩进,例如:
print(““”这三行
应该开始
在同一地方(“))
将输出:
these 3 lines
should start
in the same place
these 3 lines
should start
in the same place
要解决此问题,您需要执行以下操作:
print(““”这三行
应该开始
在同一地方(“))
但是如果print语句缩进,它仍然不起作用
范围(1)内的i的:
打印这三行(“”)
应该开始
在同一地方(“))
将输出:
these 3 lines
should start
in the same place
these 3 lines
should start
in the same place
要解决此问题,字符串应始终从行的开头开始,而不考虑缩进,如下所示:
范围(1)内的i的:
打印这三行(“”)
应该开始
在同一地方(“))
但这很难看。不,这就解决了问题!谢谢我只是想知道
repr
做什么。除此之外,我会接受它,但Stackoverflow希望我等10分钟。哦,好的,这是有道理的。喜欢原始文本吗?酷。谢谢你的帮助!我将来会记住这一点use@some_user_3是的,例如(在编写一些LaTeX时),它非常有用,等等。r
代表“raw”,使其成为“raw string literal”;它与repr
功能完全无关。)不,那就解决问题了!谢谢我只是想知道repr
做什么。除此之外,我会接受它,但Stackoverflow希望我等10分钟。哦,好的,这是有道理的。喜欢原始文本吗?酷。谢谢你的帮助!我将来会记住这一点use@some_user_3是的,例如(在编写一些LaTeX时),它非常有用,等等。r
代表“raw”,使其成为“raw string literal”;它与repr
功能完全无关。()我重新打开了你的问题,添加了一个解释代码中特定问题的答案,以及出现问题的原因-你选择的重复是关于不必要的编码,并没有真正解决这个问题。我重新打开了你的问题,添加了一个解释代码中特定问题的答案,发生这种情况的原因是——您选择的复制是关于不必要的编码,并没有真正解决这个问题。