如何在终端中正确打印方框?
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
中添加或减去硬编码数字来“修复”它以正确打印.文本是我测试的 width
和 height
参数。
+ + + + + + + + + + +
+ + (11,7)
+ +
+ +
+ +
+ +
+ + + + + + + + + + +
>>> #Bad output
+ + + + + (5,5)
+ +
+ +
+ +
+ + + + +
>>> #Good output
您的代码存在三个问题,都在行 print('+ ', ' ' * (self.width-1), ' +')
:
- 如果您将两个参数传递给
print()
,它们将以 space 分隔打印。因此,您现在在这一行中有两个 space 的偏移量。
- 您传递给 print 的第二个参数是单个 space。但是,您的框由
+
定义,其宽度为 2。因此这个 space 应该调整为双 space.
- 最后一个参数是
+
而不是+
,这也给出了一个偏移量。
基于此,我将 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)) + '+')
中
我正在尝试在终端上绘制一个带有符号的框。该形状由 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
中添加或减去硬编码数字来“修复”它以正确打印.文本是我测试的 width
和 height
参数。
+ + + + + + + + + + +
+ + (11,7)
+ +
+ +
+ +
+ +
+ + + + + + + + + + +
>>> #Bad output
+ + + + + (5,5)
+ +
+ +
+ +
+ + + + +
>>> #Good output
您的代码存在三个问题,都在行 print('+ ', ' ' * (self.width-1), ' +')
:
- 如果您将两个参数传递给
print()
,它们将以 space 分隔打印。因此,您现在在这一行中有两个 space 的偏移量。 - 您传递给 print 的第二个参数是单个 space。但是,您的框由
+
定义,其宽度为 2。因此这个 space 应该调整为双 space. - 最后一个参数是
+
而不是+
,这也给出了一个偏移量。
基于此,我将 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)) + '+')