知道长度和宽度的打印菱形(Python)

知道长度和宽度的打印菱形(Python),python,space,Python,Space,我需要通过输入长度,使用python打印菱形。我已经做了检查宽度的工作,这取决于它是奇数还是偶数,也确保输入的数字是正确的。但当它打印结果时,我遇到了一个问题。 以下是我得到的: length : 10 * *** ***** ******* ********* ********* ******* ***** *** * length = 10 #This line don't exist normally

我需要通过输入长度,使用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")
长度:10
*
***
*****
*******
*********
*********
*******
*****
***
*
长度=10#此行通常不存在,只是为了避免输入和每次检查。
长度测试=长度
答案=长度测试%2
如果(答案=0):
长度_1=1
而(长度_1<长度):
打印(“*”*长度_1)
长度_1=长度_1+2
长度_1=长度_1-2
而(长度_1>0):
打印(“*”*长度_1)
长度_1=长度_1-2
其他:
打印(“奇数”)

空间问题的任何解决方案都可以使其看起来像钻石吗?

在星星前打印空间:

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

您还需要在前面添加一半的
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")
length=10#该行通常不存在,只是为了避免输入和每次检查。
长度测试=长度
答案=长度测试%2
如果(答案=0):
长度_1=1
而(长度_1<长度):
打印(“*((长度-长度1)//2)+“*”*长度1)
长度_1=长度_1+2
长度_1=长度_1-2
而(长度_1>0):
打印(“*((长度-长度1)//2)+“*”*长度1)
长度_1=长度_1-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-1
将是
n*2-1

输出(对于
n=5
):


嗯,是的,你只打印星星,但是你还需要一些
打印(“*lenght\u space)
代码来打印一些空格。你比我快了10秒:)我想打印一颗钻石,用的是中间长度,而不是边1,如果我的信息不够具体,很抱歉:)谢谢你的帮助@MaxyArthes你看到我对
n=n//2
的评论了吗?
for i in range(-n + 1, n):
    print('{:^{}}'.format('*' * ((n - abs(i)) * 2 - 1), n * 2 - 1))
    *    
   ***   
  *****  
 ******* 
*********
 ******* 
  *****  
   ***   
    *