首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地打印ASCII艺术?

如何正确地打印ASCII艺术?
EN

Stack Overflow用户
提问于 2021-02-10 10:05:37
回答 3查看 1.5K关注 0票数 0

我正在制作一个基于文本的rpg/冒险游戏,我想添加一些ASCII艺术。对于这样的多行字符串,我使用了三重引号:

代码语言:javascript
复制
    print("""
                   /\                       /\                        /\                       /\
                  /**\                     /**\                      /**\                     /**\
                 /****\   /\      /\      /****\   /\               /****\   /\      /\      /****\   /\
                /      \ /**\    /  \    /      \ /**\             /      \ /**\    /  \    /      \ /**\
               /  /\    /    \  /    \  /  /\    /    \    /\     /  /\    /    \  /    \  /  /\    /    \
              /  /  \  /      \/      \/  /  \  /      \  /  \   /  /  \  /      \/      \/  /  \  /      \
             /  /    \/ /\     \      /  /    \/ /\     \/     \/  /    \/ /\     \      /  /    \/ /\     \
            /  /      \/  \/\   \    /  /      \/  \/\   \     /  /      \/  \/\   \    /  /      \/  \/\   \
         __/__/_______/___/__\___\__/__/_______/___/__\___\___/__/_______/___/__\___\__/__/_______/___/__\___\_
    """)

理想情况下,这就是我运行程序时应该看到的样子。

然而,它看起来却是这样,一点也不理想,而且看起来非常混乱:

我在想,在如何解决这个问题上,是否有人能为我指明正确的方向。提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-10 10:29:58

代码中的主要问题是,行尾的\被解释为行的延续,因此下一行将被连接到前一行。

您可以避免这一点,方法是在反斜杠后面的行尾添加任何字符,比如空格(因为只有当反斜杠是行中的最后一个字符时才会触发行继续)。

另一种解决方案是使用原始字符串,从r""" ....开始。如文献资料中所述

具体来说,原始文字不能以单个反斜杠结尾(因为反斜杠将转义下面的引号字符)。还请注意,--一个反斜杠后面跟着一个换行符--被解释为这两个字符是文字的一部分,而不是行的延续。

这还将防止任何以反斜杠开头的潜在转义序列被解释为反斜杠。

票数 0
EN

Stack Overflow用户

发布于 2021-02-10 10:07:41

您应该raw您的字符串,如下所示:

代码语言:javascript
复制
#     v
print(r"""
                   /\                       /\                        /\                       /\
                  /**\                     /**\                      /**\                     /**\
                 /****\   /\      /\      /****\   /\               /****\   /\      /\      /****\   /\
                /      \ /**\    /  \    /      \ /**\             /      \ /**\    /  \    /      \ /**\
               /  /\    /    \  /    \  /  /\    /    \    /\     /  /\    /    \  /    \  /  /\    /    \
              /  /  \  /      \/      \/  /  \  /      \  /  \   /  /  \  /      \/      \/  /  \  /      \
             /  /    \/ /\     \      /  /    \/ /\     \/     \/  /    \/ /\     \      /  /    \/ /\     \
            /  /      \/  \/\   \    /  /      \/  \/\   \     /  /      \/  \/\   \    /  /      \/  \/\   \
         __/__/_______/___/__\___\__/__/_______/___/__\___\___/__/_______/___/__\___\__/__/_______/___/__\___\_
    """)

这是因为反斜杠"\“是Python中的特别字符。

票数 1
EN

Stack Overflow用户

发布于 2021-02-10 10:35:16

除了其他答案之外,另一件可能会搞乱ASCII艺术的东西是缩进,例如:

代码语言:javascript
复制
print("""these 3 lines
         should start
         in the same place""")

将产出:

代码语言:javascript
复制
these 3 lines
         should start
         in the same place

要解决这个问题,您需要这样做:

代码语言:javascript
复制
print("""these 3 lines
should start
in the same place""")

但是,如果print语句缩进,它仍然不能工作。

代码语言:javascript
复制
for i in range(1):
    print("""these 3 lines
    should start
    in the same place""")

将产出:

代码语言:javascript
复制
these 3 lines
    should start
    in the same place

要解决这个问题,您的字符串应该始终从行的开头开始,而不管缩进,如下所示:

代码语言:javascript
复制
for i in range(1):
    print("""these 3 lines
should start
in the same place""")

但那太丑了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66134751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档