python 字符串中的间距

Spacing in python string

似乎无法弄清楚我在 python 中的间距是怎么回事。我试图让它打印这个:

Two Vertical Lines, height=3; width=3:
* *
* *
* *

Two Vertical Lines, height=4; width=5:
*   *
*   *
*   *
*   *

Two Vertical Lines, height=5; width=2:
**
**
**
**
**

但使用此代码:

def two_vertical_lines (height, width):
    for x in range (0, height):
        if width > 2:
            new_width = width - 2 
            mult2 = " " * new_width
            print ("*",mult2,"*", "\n", end='')
        else:
             print ("**", "\n", end='')
    return

由于某种原因,我的程序正在返回:

Two Vertical Lines, height=3; width=3:
*  * 
*  * 
*  * 

Two Vertical Lines, height=4; width=5:
*  * 
*  * 
*  * 
*  * 

Two Vertical Lines, height=5; width=2:
** 
** 
** 
** 
** 

(注意两条垂直线之间 spacing/width 的区别,即使我的变量 new_width 技术上应该是 1 space)

当您使用 print 时,所有传递给它的参数将被打印出来,并在它们之间添加一个 space。

>>> print('a', 'b')
a b

要解决这个问题,您可以创建一个字符串并打印它,就像这样

print ("*{}*\n".format(mult2), end='')

实际上,您可以让 print 函数处理它,而不是在字符串中显式添加 \n,就像这样

print ("*{}*".format(mult2))

另一个改进可能是,您不必特殊情况,width <= 2 情况,因为字符串与零或负整数相乘只会产生空字符串。

>>> '*' * -1
''
>>> '*' * 0
''

所以你可以简单地写

def two_vertical_lines(height, width):
    for x in range(height):
        print("*{}*".format(" " * (width - 2)))

默认情况下,print() 输出其参数,并用单个 ' ' (space) 分隔。但是,这可以使用 sep 参数进行更改。只需像下面这样使用 sep=''

def two_vertical_lines (height, width):
    for x in range (0, height):
        if width > 2:
            new_width = width - 2 
            mult2 = " " * new_width
            print ("*", mult2, "*", sep='')  # <-- change
        else:
             print ("**", "\n", end='')
    return