如何在python中制作正方形

问题描述

k=int(input('n:'))
def square(n):
    lines = ['*' * (n - i) + " " * i for i in range(n)]
    for l in lines + lines[-2::-1]:
        print(l + l[::-1])
square(k)

我正在编写一个代码来打印带有星星的方块。如果我在 n 中放入 2,则该正方形必须是 3x3 正方形,但它会打印 4x3 正方形。如果我在 n 中放入 4,则必须有一个 7x7 的正方形,但它会打印 8x7 的正方形。中间的空白方块每边必须有 n 个星星。我必须在哪里更改才能解决此问题?

解决方法

顶线和底线需要一个特殊情况,在那里你需要少一颗星。

(这是因为如果你看这个图案,它几乎就像中心星有两颗重叠的星星在彼此的顶部,这减少了一颗可见的星星)

我会这样写:

def print_line(n,i,gap):
    if i == 0:
        print('*' * (2*n-1))
    else:
        print('*' * (n-i) + ' ' * (gap-1) + '*' * (n-i))

def square(n):
    gap = 0
    for i in range(n):
        print_line(n,gap)
        gap += 2

    gap = 2*n - 4
    for i in reversed(range(n-1)):
        print_line(n,gap)
        gap -= 2


square(10)