【问题标题】:Printing patterns using loop in python在python中使用循环打印模式
【发布时间】:2020-10-07 14:35:22
【问题描述】:

我的程序读取一个整数 N,它对应于整数的双向数组的顺序,并根据以下示例构建数组。我想像预期的输出一样填充中间元素。

我的代码:

n = int(input())
for row in range(1, n+1):
    for colum in range(1, n+1):
        print(row, end="   ")
    print()


输入:

5 


我的输出:

1   1   1   1   1   
2   2   2   2   2
3   3   3   3   3   
4   4   4   4   4
5   5   5   5   5


我想要的输出:

1   1   1   1   1
1   2   2   2   1
1   2   3   2   1
1   2   2   2   1
1   1   1   1   1

我想像这样填充中间元素。中间的高度数,然后是第二个高度数,依此类推..

【问题讨论】:

    标签: python-3.x loops conditional-statements


    【解决方案1】:

    对于“1-2-3-2-1”序列,您可以将其作为“行与 n + 1 - 行之间的最小值” - - min(row, n + 1 - row)。 (和列的对称) - 然后 你打印行和列的这个计算的最小值:

    n = int(input())
    for row in range(1, n+1):
        for column in range(1, n+1):
            mrow = min(row, n + 1 - row)
            mcol = min(column, n + 1 - column) 
            print(min(mrow, mcol), end="   ")
        print()
    

    【讨论】:

      【解决方案2】:

      我希望这不是一个家庭作业问题,但我会帮助你。
      使用列表可以更轻松地做到这一点!:

      def cell_value(i, j, n_rows):
          return min(
              abs(i - -1),
              abs(i - n_rows),
              abs(j - -1),
              abs(j - n_rows),
          )
      
      rows=int(input("Enter the number of rows:"))
      row2 = [
          [
              cell_value(i, j, rows)
              for j in range(rows)
          ]
          for i in range(rows)
      ]
      
      for r in row2:
          print(*r)
      

      或者可以像下面这样更容易地完成:

      numberOfRows = int(input("Enter the number of rows:"))
      listOut = [[1]*numberOfRows] * numberOfRows #grid of 1s of appropriate size
      for j in range(int((numberOfRows+1)/2)): #symmetrical, so only look to the middle
          if j > 0:
              listOut[j] = list(listOut[j-1]) #copy previous row
          for i in range(int((numberOfRows+1)/2)):   
              if i>=j:
                  listOut[j][i] = j+1
                  listOut[j][numberOfRows-(i+1)] = j+1
          #copy current row to appropriate distance from the end
          listOut[numberOfRows-(j+1)] = list(listOut[j])
      for row in listOut:
          print(row)
      

      以上两个程序都给出了SAME结果

      Enter the number of rows:5
      1 1 1 1 1
      1 2 2 2 1
      1 2 3 2 1
      1 2 2 2 1
      1 1 1 1 1
      

      注意:这仅适用于奇数! 如果您有任何疑问,请告诉我...
      干杯!

      【讨论】:

        猜你喜欢
        • 2020-02-04
        • 1970-01-01
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        • 2021-07-06
        • 2022-06-17
        • 1970-01-01
        • 2022-01-04
        相关资源
        最近更新 更多