如何在终端中正确打印方框?

How do I print my square box correctly in the terminal?

我正在尝试在终端上绘制一个带有符号的框。该形状由 class 对象创建。我想知道如何动态打印我的对象。

class Box:

    def __init__(self, width, height):
        self.width = width
        self.height = height

    def draw_box(self):
        print('+ ' * self.width)
        for s in range(self.height-2):
            print('+ ', ' ' * (self.width-1), ' +')
        print('+ ' * self.width)


# Create and Run code
box = Box(5,4)
box.draw_box()

但是您可以在下面看到盒子的“宽度”编码被破坏了。测试有点困难,因为每次我更改对象的宽度和高度参数时,我都必须通过从 self.width 中添加或减去硬编码数字来“修复”它以正确打印.文本是我测试的 widthheight 参数。

+ + + + + + + + + + + 
+             + (11,7)
+             +
+             +
+             +
+             +
+ + + + + + + + + + + 
>>> #Bad output
+ + + + + (5,5)
+       +
+       +
+       +
+ + + + +
>>> #Good output

您的代码存在三个问题,都在行 print('+ ', ' ' * (self.width-1), ' +'):

  1. 如果您将两个参数传递给 print(),它们将以 space 分隔打印。因此,您现在在这一行中有两个 space 的偏移量。
  2. 您传递给 print 的第二个参数是单个 space。但是,您的框由 + 定义,其宽度为 2。因此这个 space 应该调整为双 space.
  3. 最后一个参数是 +而不是+ ,这也给出了一个偏移量。

基于此,我将 draw_box() 更改为:

def draw_box(self):
    print('+ ' * self.width)
    spacing = '  ' * (self.width-2)
    for s in range(self.height-2):         
        print(f'+ {spacing}+ ')
    print('+ ' * self.width)
    class Box:

    def __init__(self, width, height):
        self.width = width
        self.height = height

    def draw_box(self):
        print('+ ' * self.width)
        for s in range(self.height-2):
            print('+ ' + ' ' * (2*(self.width-2)) + '+')
        print('+ ' * self.width)


# Create and Run code
box = Box(10,4)
box.draw_box()

因为在打印每个“+”符号后需要一个 space。你应该考虑加倍宽度。如果您要打印 5 个 +,那么您将使用 10char spaces 来打印它们。因此,双倍宽度应包含在行 print('+ ' + ' ' * (2*(self.width-2)) + '+')