为什么下面的模式程序无法提供所需的输出?

时间:2019-07-11 10:16:57

标签: python

n=int(input('enter no of rows\n'))
for row in range(0,n):
    for col in range(0,n):
        if row==0 or col==(n-1):
             print("A",end="")
        else:
            print(end="")
    print() 

我需要如下所示的输出。我没有得到它。任何人都可以帮我解决,代码有问题吗?

AAAAA
 A  A
  A A
   AA
    A

2 个答案:

答案 0 :(得分:1)

如果要使用自己的方式:

n=int(input('enter no of rows\n'))
for row in range(0,n):
    for col in range(0,n):
        if row == 0 or col == (n-1) or row == col:
            print ("A",end ="")
        else:
             print(" ", end ="")
    print()

输出:

enter no of rows
5
AAAAA
 A  A
  A A
   AA
    A

答案 1 :(得分:0)

您可以使用python“功能”并通过1个循环来实现:

n = int(input('enter no of rows\n'))
print("A" * n)
for row in range(n - 2):
    print(" " * (row + 1) + "A" + " " * (n - row - 3) + "A")
print(" " * (n - 1) + "A")

为什么起作用?

首先,让我们看一下您想要获得的结果。您要在用符号A构建的控制台三角形中进行打印。

要创建带有循环的算法,我们应该在每个打印行中找到一些共同点。让我们再次看一下输出:

0 row:  AAAAA  # no spaces, 5 'A' chars
1 row:   A  A  # 1 space + 'A' + 2 spaces + 'A'
2 row:    A A  # 2 spaces + 'A' + 1 space + 'A'
3 row:     AA  # 3 spaces + 'A' + 0 spaces + 'A'
4 row:      A  # 4 spaces + 'A'

我添加了一些注释以显示如何分析此输出。在这里,我们看到第一最后行与其他行没有遵循相同的逻辑。因此,让我们在循环外打印它们。现在,让我们尝试创建用于构建“中央”行的算法:

  1. 开头的空格数(''char)等于row index;
  2. 'A'char;
  3. 'A'字符之间的空格数量等于amount of rows-row index-2(每行的总长度应等于amount of rows;我们应减去{{1} },因为除空格外,我们打印2个'A'字符);
  4. 'A'char。

在python中,string和int的乘积会创建新的字符串,该复制的次数由int值提供。示例:2将返回新字符串"A" * 10。我们将在代码中使用此技巧。

现在让我们编码。首先,让我们打印第一行,其中包含重复"AAAAAAAAAA"次的'A'符号:

n

然后让我们编写循环。在我的代码中,我使用了range()和1个参数。但是我们应该记住,我们已经打印了0行,并且应该从1开始。在我的代码中,它不是很清楚,所以让我们以其他方式进行操作:

print("A" * n)

现在让我们为打印行编写代码:

for row in range(1, row - 1):

最后打印最后一行:

print(" " * row              # amount of spaces equals row index
      + "A"                  # 'A' char
      + " " * (n - row - 2)  # amount of spaces between 'A' chars equals
                             # length of row - row index - 2
      + "A")                 # 'A' char

完整代码:

print(" " * (n - 1)          # amount of spaces on the start of last line
                             # equals length of row - 1
      + "A")                 # 'A' char