如何打印这种模式?我无法得到消除中间部分的逻辑

Kar*_*kar 11 python python-2.7 python-3.x

编写一个程序,询问用户输入n(假设用户输入正整数)并使用'*'高度星号打印三角形的边界n.

例如,如果用户输入6,则三角形的高度应为6,如下所示,并且顶行上的星号之间不应有空格:

******
*   *
*  *
* *
**
*
Run Code Online (Sandbox Code Playgroud)

我无法理解如何在模式的顶部和末尾之间打印部分?这是我的代码:

n = int(input("Enter a positive integer value: "))
for i in range (n, 0, -1):
    print ("*" * i)
Run Code Online (Sandbox Code Playgroud)

for环路是用于打印反向星号三角形.障碍是打印中间部分.

Ton*_*ino 15

在循环的每次迭代中,for您打印一行模式,其长度为i.所以,在你将拥有的模式的第一行和最后一行"*" * i.在模式的每个其他行中,您必须*在行的开头打印一个,*在末尾打印一个,(i - 2)在中间打印空格,因为已经打印出2个星,这导致了"*" + (" " * (i - 2)) + "*".结合这两种情况后,我们得到以下代码:

n = int(input("Enter a positive integer value: "))
for i in range(n, 0, -1):
    if i == 1 or i == n:   
        print("*" * i)
    else:
        print("*" + (" " * (i - 2)) + "*")
Run Code Online (Sandbox Code Playgroud)

  • 最好将你的附加解释[编辑]到答案本身,这样对未来的读者来说就更明显了.一般而言,仅代码答案比那些对解决问题的一些解释更难概括,以产生此代码. (3认同)

Mar*_*ans 10

尝试以下方法,它避免iffor循环中使用语句:

n = int(input("Enter a positive integer value: "))
print('*' * n)

for i in range (n-3, -1, -1):
    print ("*{}*".format(' ' * i))

print('*')
Run Code Online (Sandbox Code Playgroud)

对于6,您将获得以下输出:

******
*   *
*  *
* *
**
*
Run Code Online (Sandbox Code Playgroud)

您还可以处理以下特殊情况1:

n = int(input("Enter a positive integer value: "))

if n == 1:
    print '*'
else:
    print('*' * n)

    for i in range (n-3, -1, -1):
        print ("*{}*".format(' ' * i))

    print('*')
Run Code Online (Sandbox Code Playgroud)


Ian*_*Ian 5

为不同的打印方式设置不同的条件.

使用三元运算符,您可以使它成为一行代码:

n = int(input("Enter a positive integer value: "))
for i in range (n, 0, -1):
    print ("*" * i if i == n or i == 1 else "*" + " " * (i - 2) + "*")
Run Code Online (Sandbox Code Playgroud)

请注意,您只有两种打印方式.

诀窍是:

请注意,您实际连续打印时i == n or i == 1:

******
*
Run Code Online (Sandbox Code Playgroud)

但除此之外,你给出的空间尽可能多 (i - 2)

*   * #for 5, 3 spaces
*  *  #for 4, 2 spaces
* *   #for 3, 1 space
**    #for 2, 0 space
Run Code Online (Sandbox Code Playgroud)

(注:**尽管如此,可归类为两种情况)

所以你可以用1行语句来完成它.

编辑:

或者,正如Bakuriu在评论中建议的那样,你可以利用Python布尔评估结果为1时为true,0时为false时打印它而没有像这样的三元运算符:

n = int(input("Enter a positive integer value: "))
for i in range (n, 0, -1):
    print('*' + '*'[i==n]*(i-2) + '*' * (i>1))
Run Code Online (Sandbox Code Playgroud)