首页 > 解决方案 > 如何在终端中正确打印我的方框?

问题描述

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

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()

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

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

标签: pythonprintingterminal

解决方案


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

  1. 如果您将两个参数传递给print(),它们将被打印出来,并用空格分隔。因此,您现在在这一行中有两个空格的偏移量。
  2. 您传递给 print 的第二个参数是一个空格。但是,您的框由 定义+ ,其宽度为 2。因此这个空间应该调整为双倍空间。
  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)

推荐阅读