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

时间:2017-01-26 19:36:59

标签: python space

我需要使用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")

空间问题的任何解决方案,使其实际上看起来像钻石?

3 个答案:

答案 0 :(得分:2)

为什么要烦扰多个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-1并计算星号的数量通过n减去绝对当前指数(以提供[-n, -1][1, n]之间的反向对称)乘以2减1来创建一个可居中的菱形(奇数长度)。

我们使用^{}n * 2 - 1将字符串格式设为中心,因为这是可能的最大宽度(i = 0时,(n - abs(i)) * 2 - 1n * 2 - 1

输出(适用于n = 5):

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

答案 1 :(得分:1)

在星星之前打印空间:

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

<强>输出

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

答案 2 :(得分:0)

您还需要在前面添加一半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")