打印钻石知道长度和宽度(Python)

2024-04-19 05:34:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用python打印一个菱形,输入长度。我已经让它工作,以检查宽度,根据它是奇数或偶数,也确保输入的数字是正确的。但打印结果时我遇到了问题。 我得到的是:

length : 10

    *
    ***
    *****
    *******
    *********
    *********
    *******
    *****
    ***
    *


length = 10   #This line don't exist normally, its just to avoid the input and every check.
lengthTest = length
answer = lengthTest % 2
if (answer == 0):
    length_1 = 1
    while (length_1 < length):
        print("*" * length_1)
        length_1 = length_1 + 2
    length_1 = length_1 - 2
    while (length_1 > 0):
        print("*" * length_1)
        length_1 = length_1 - 2

else:
    print("odd")

有没有解决太空问题的办法让它看起来像钻石?在


Tags: answer宽度line数字thislengthexist奇数
3条回答

为什么要麻烦多个for循环?在

for i in range(-n + 1, n):
    print('{:^{}}'.format('*' * ((n - abs(i)) * 2 - 1), n * 2 - 1))
  • 如果您想要一半大小,请在循环之前设置n = n // 2。在

这是数学:

每次我们得到+2星号,我们希望它们上升直到到达中心,然后再下降,所以我们从-n+1到{},并通过n减去绝对电流指数(在[-n, -1]和{}之间提供反向对称性)乘以2来计算星号的数量,减去1可以创建一个中心钻石(奇数长度)。在

我们使用^{}n * 2 - 1进行字符串格式化,因为这是可能的最大宽度(当i = 0(n - abs(i)) * 2 - 1将是n * 2 - 1)。在

输出(对于n = 5):

^{pr2}$

在星星前打印空格:

length = 10
x = 1
while x < length:
    print(" " * ((length - x) // 2), "*" * x)
    x += 2
x -= 2
while x > 0:
    print(" " * ((length - x) // 2), "*" * x)
    x -= 2

输出

^{pr2}$

您还需要在前面添加length-length_1个空格的一半:

length = 10   #This line don't exist normally, its just to avoid the input and every check.
lengthTest = length
answer = lengthTest % 2
if (answer == 0):
    length_1 = 1
    while (length_1 < length):
        print(" " * ((length - length_1)//2) + "*" * length_1)
        length_1 = length_1 + 2
    length_1 = length_1 - 2
    while (length_1 > 0):
        print(" " * ((length - length_1) // 2) + "*" * length_1)
        length_1 = length_1 - 2

else:
    print("odd")

相关问题 更多 >