如何格式化代码以每次都以相同的宽度打印?

时间:2015-10-30 20:30:16

标签: python string-formatting ascii-art

我正在制作游戏,我想知道是否有办法让python打印一个看起来像这样的地图,并且在打印最终结果时看起来不错?它应该是基于文本的游戏中的房间地图。我可以用命令格式化它吗?我只是尝试过:

print("|------------------------------|")#print room map
print("|   [Chest]                 |")
print("|                            _ |")
print("|                       Door|")
print("|                             _|")
print("|   [Table]                 |")
print("|  (You)                     |")
print("|------------------------------|")#print room map

可以预见,以上打印:

>>> print_room()
|------------------------------|
|   [Chest]                 |
|                            _ |
|                       Door|
|                             _|
|   [Table]                 |
|  (You)                     |
|------------------------------|

然而,在我的IDE中,这些行中的每一行看起来都在同一个地方终止。如何编写代码,以确保线条宽度相同?我希望它打印看起来像这样:

|---------------------|
|                     |
|                     |
|                     |
|                     |
|---------------------|

3 个答案:

答案 0 :(得分:4)

您使用什么文本编辑器编写代码?我怀疑你使用的是像Word或Wordpad这样使用比例字体的东西。

我建议您切换到专用代码编辑器,例如Notepad++UltraEdit,或者最坏的情况是记事本。为文本文件制作的编辑器,使用固定的字体,如Courier。这将使你的地图线更容易排列,还有许多其他好处。

注意Stack Overflow如何使用固定的字体?它表明您在每一行上没有正确数量的空格。正确间隔的代码看起来像你想要的那样:

print("|------------------------------|")#print room map
print("|   [Chest]                    |")
print("|                            _ |")
print("|                          Door|")
print("|                             _|")
print("|   [Table]                    |")
print("|  (You)                       |")
print("|------------------------------|")#print room map

答案 1 :(得分:3)

您可以尝试使用多行字符串,即。用三引号括起来的字符串可以在一行上延伸。所以你可以这样做:

map = """
                        |---------------------|
                        |                     |
                        |                     |
                        |                     |
                        |                     |
                        |---------------------|"""
print(map)

这是你的意思吗?

编辑:在您的代码中,在添加“table”等之后,您还没有使用正确的空格数调整行。如果您有相同的代码,但添加了更多的空格,那么您将会能够让它以你的方式运作。您将其保存在脚本中然后运行它,对吗?不是在翻译中尝试吗?最后,专业提示:在终端中,每个角色占据相同宽度的空间,即 .....的宽度与
相同 MMMMM因为在每种情况下它都是相同数量的字符。

答案 2 :(得分:2)

您的基本问题是每条线的长度必须相同。可能干扰这一点的事情:

  • 字体可能会显示不同宽度的不同字符。通常'终端' windows将使用固定宽度字体:每个字符,空格等具有完全相同的宽度。 '更高等级'编辑器(例如Word)将使用可变宽度字体,因为它更美观,并且具有更广泛的美学用途。
  • 您对字符串所做的事情可能会改变实际长度。正如您在提供的示例中所看到的,不同数量的字符将以不同的宽度显示。因此,您的编程挑战是确保每行的宽度相同。

您应该采取哪些措施来确保您构建字符串的方式变得更加聪明。

让我们从基本的房间字符串,胸部和门开始:

room = "|                     |"
chest = "[Chest]"
door = "Door"

现在让我们编写一个在特定位置插入对象的函数:

def insert_object(new_object: str, position: int) -> str:
    room_start = room[0:position]
    end_position = position + len(new_object)
    room_end = room[end_position:]
    new_room = room_start + new_object + room_end
    return new_room

这给我们带来了这样的结果:

>>> room = "|                     |"
>>> chest = "[Chest]"
>>> door = "Door"
>>> def insert_object(new_object: str, position: int) -> str:
...     room_start = room[0:position]  # Gets the part of the room before the 'object'
...     end_position = position + len(new_object)  # Gets the position after the object 'ends'
...     room_end = room[end_position:]  # Gets the part of the room after the object 'ends'
...     new_room = room_start + new_object + room_end  # Pieces these parts together, with the object in the middle
...     return new_room  # Returns the result
... 
>>> x = insert_object(chest, 3)
>>> print(x)
'|  [Chest]            |'

为每一行做这件事'您想要插入物品的房间,并且可以保持宽度!

room = "|                     |"
chest = "[Chest]"
door = "Door"
wall = "---------------------"
trap = "-"
you = "You"
table = "[Table]"

def print_room():
    print(insert_object(wall,1))
    print(insert_object(chest,3))
    print(insert_object(trap,20))
    print(insert_object(door,18))
    print(insert_object(trap,21))
    print(insert_object(table,4))
    print(insert_object(you,3))
    print(insert_object(wall,1))

导致:

>>> print_room()
|---------------------|
|  [Chest]            |
|                   - |
|                 Door|
|                    -|
|   [Table]           |
|  You                |
|---------------------|