python嵌套循环输出艺术和反向

时间:2015-10-08 20:38:51

标签: python nested-loops

我正在尝试编写一个看起来像这样的程序,如果输入数字是6,或类似输出应该是这样的:

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

但当我这样做的时候,就像我被告知的那样,这种方式特别是因为这是同学告诉我的事情。 :

    n = int(input("Enter a value for n: "))
    for i in range(1, n + 1):
        for j in range(n):
            if n - j > i:
               print(" ", end = " ")
            else:
               print("*", end = " ")
     print("")

    for i in range(1, n):
        for j in range(n):
            if n - j < i:
               print(" ", end = " ")
            else:
               print("*", end = " ")
    print("")

我明白了:

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

我做错了什么?请告诉我如何正确排队,如果有人可以帮助我,我真的很感激,所以我可以自己学会这样做,请帮助我...

3 个答案:

答案 0 :(得分:2)

你的循环有点过于复杂,所以我有点简化:

n = int(input("Enter a value for n: "))

for x in range(n):
    out = ''
    for y in range(n-x):
        out = out +' '
    for y in range(x):
        out = out +'*'
    print(out)
for x in range(n):
    out = ''
    for y in range(x):
        out = out +' '
    for y in range(n-x):
        out = out +'*'
    print(out)

享受!

答案 1 :(得分:2)

如果您的作业要求您完全按照发布的方式编写代码,那么Austin Kootz的回答是可行的。

但是,更简化的方法是使用ljust

n = 6

for x in range(n - 1, 0, -1):
    print ''.ljust(x, ' ') + '*'.ljust(n - x, '*')

for x in range(n):
    print ''.ljust(x, ' ') + '*'.ljust(n - x, '*')

答案 2 :(得分:0)

你想要的第二组循环是获取行号(从1开始计数)并打印多个空格(“”),然后为行的其余部分打印星号(“*”)。因此,如果i是行号而j是列号(并且索引从0开始),则应该打印“”,同时j&lt; i + 1和“*”否则。这给出了:

# The top part of the pyramid
for i in range(1, n + 1):
    for j in range(n):
        if n - j > i:
            print(" ", end = " ")
        else:
            print("*", end = " ")
    print("")
# The bottom half of the pyramid
for i in range(n):
    for j in range(n):
        # Print spaces in the beginning of the row
        # (while the column number is less than the row number)
        if j < i + 1:
           print(" ", end = " ")
        # Print asterisks for the rest of the row
        else:
           print("*", end = " ")
    print("")