python - 如何在终端中正确打印我的方框?
问题描述
我正在尝试在终端上绘制一个带有符号的框。形状由类对象创建。我想知道如何动态打印我的对象。
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
解决方案
您的代码存在三个问题,都在一行中print('+ ', ' ' * (self.width-1), ' +')
:
- 如果您将两个参数传递给
print()
,它们将被打印出来,并用空格分隔。因此,您现在在这一行中有两个空格的偏移量。 - 您传递给 print 的第二个参数是一个空格。但是,您的框由 定义
+
,其宽度为 2。因此这个空间应该调整为双倍空间。 - 最后一个参数是
+
代替+
,它也给出了一个偏移量。
基于此,我将更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)
推荐阅读
- quickbooks - 如何在没有用户交互的情况下仅通过客户端 ID 和密码验证我的 Quickbook Intuit api 访问权限?
- javascript - 使用对象数组,如何计算活动属性为 true 的元素的数量?
- javascript - 未捕获(承诺)DOMException:无法在“WebGL2RenderingContext”上执行“texImage2D”:可能无法加载受污染的画布
- android - RecyclerView 内容落后而不是上面的 TextView
- mysql - 如何使用 JPA 和 Hibernate 仅更新少数实体字段?
- solr - Solr 拼写检查不返回正确的排序规则
- c# - 理解 MemoryMarshal.Cast 的返回值
- javascript - 使用 multer 发送多个表单数据以表达 API
- node.js - 'C:\Program' 处的 package.json 错误中的 mongodb 文件夹绝对路径未被识别为内部或外部命令
- python - Scipy 聚类;使用物理闵可夫斯基度量?