首页 > 解决方案 > 如何使用 python 打印这个菱形图案?

问题描述

我想在python中打印这个模式:(10行菱形递增-递减数)

         1
        121
       12321
      1234321
     123454321
    12345654321
   1234567654321
  123456787654321
 12345678987654321
1234567891987654321
 12345678987654321
  123456787654321
   1234567654321
    12345654321
     123454321
      12321
       121
        1

注意:最后但第四行缺少 1234321,所以我认为它不是一个完美的菱形。Plus 不是 10,而是在第十行打印了 1。如何实现这个形状?请告诉我。

我不知道如何使用数字来做到这一点,所以使用 * 尝试了下面的基本程序,但我不知道如何使用上面显示的数字打印相同的程序。

n=11
for i in range(n):
    print(''*(n-i-1)+'* '*(i+1))
for j in range(n-1,0,-1):
    print(''*(n-j)+'* '*(j))

这也只打印一半的形状

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

如何打印我提到的模式(使用增量 - 减量数字)?加上问题是错误的,因为它错过了 1234321 行还是可以实现?请帮助我。我是编码新手,那么如何使用最简单的方法来实现这一点,即使用循环结构,如 for 循环?提前感谢您的帮助和时间。

标签: pythonpython-3.x

解决方案


以下是如何生成几何图形的可能性:

n = 11
for i in range(n // 2 + 1):
    print(' ' * (n // 2 - i) + '* ' * (i + 1))
for i in reversed(range(n // 2)):
    print(' ' * (n // 2 - i) + '* ' * (i + 1))

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

编辑:这是一个带有数字的实际实现,不幸的是,它在 n = 10 时失败。

from itertools import chain
n = 9
ranges = chain(range(n), reversed(range(n - 1)))
for i in ranges:
    print('  ' * (n - i - 1), *[x + 1 for x in range(i + 1)],
          *[x + 1 for x in reversed(range(i))])
                 1
               1 2 1
             1 2 3 2 1
           1 2 3 4 3 2 1
         1 2 3 4 5 4 3 2 1
       1 2 3 4 5 6 5 4 3 2 1
     1 2 3 4 5 6 7 6 5 4 3 2 1
   1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
   1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
     1 2 3 4 5 6 7 6 5 4 3 2 1
       1 2 3 4 5 6 5 4 3 2 1
         1 2 3 4 5 4 3 2 1
           1 2 3 4 3 2 1
             1 2 3 2 1
               1 2 1
                 1

推荐阅读