金字塔、棱形打印

打印金字塔

这里只展示打印数字金字塔,答应 * 型金字塔更容易

金字塔:方法一

n = int(input('方法一,N:'))
for i in range(1, n+1):
    print(' '*(n-i), end='')        #空格数
    for k in range(1, 2*i):         #打印数字
        print((i-abs(i-k)), end='') #每一行输出的第K个数的值
    print()                         #打印数字后换行

## 金字塔:方法一找规律
i    n=4     空格            每行数字个数(第二个for的范围)  每行中的最大数    每一行输出的第K个数的值
1     1      3 = n-i = 4-1   1 = 2i-1 = 2*1-1             1 = i           最大数-|最大数-K| = 1-|1-k|
2    121     2 = n-i = 4-2   3 = 2i-1 = 2*2-1             2 = i           最大数-|最大数-K| = 2-|2-k|
3   12321    1 = n-i = 4-3   5 = 2i-1 = 2*3-1             3 = i           最大数-|最大数-K| = 3-|3-k|
4  1234321   0 = n-i = 4-4   7 = 2i-1 = 2*4-1             4 = i           最大数-|最大数-K| = 4-|4-k|

金字塔:方法一 金字塔:方法一

金字塔:方法一改版

最大数只能是5,第5行中间最大数是9,如果出现2位数的话会格式错乱:

n = int(input('方法一改版(最大数只能是5),N:'))
for i in range(1, n+1):
    print(' '*(n-i), end='')                        #空格数
    for k in range(1, 2*i):                         #打印数字
        print((2*i-1-abs(2*i-1-(2*k-1))), end='')   #每一行输出的第K个数的值
    print()                                         #打印数字后换行


## 金字塔:方法一改版找规律
i    n=4     空格            每行数字个数(第二个for的范围)  每行中的最大数        每一行输出的第K个数的值
1     1      3 = n-i = 4-1   1 = 2i-1 = 2*1-1             1 = 2i-1 = 2*1-1    最大数-|最大数-(2k-1)| = 1-|1-(2k-1)|
2    131     2 = n-i = 4-2   3 = 2i-1 = 2*2-1             3 = 2i-1 = 2*1-1    最大数-|最大数-(2k-1)| = 3-|3-(2k-1)|
3   13531    1 = n-i = 4-3   5 = 2i-1 = 2*3-1             5 = 2i-1 = 2*1-1    最大数-|最大数-(2k-1)| = 5-|5-(2k-1)|
4  1357531   0 = n-i = 4-4   7 = 2i-1 = 2*4-1             7 = 2i-1 = 2*1-1    最大数-|最大数-(2k-1)| = 7-|7-(2k-1)|

金字塔:方法一改版 金字塔:方法一改版

金字塔:方法二

这种方法只适用于步长为1的,无法实现:[1, 131, 13531, 1357531 135797531]

n = int(input('方法二,N:'))
for i in range(1, n+1):
    print(' '*(n-i), end='')        #空格数
    print(int('1'*i)**2)            #每一行输出的数值


## 金字塔:方法二找规律
i    n=4     每行的空格数      i的输出数
1     1      3 = n-i = 4-1    1**2
2    121     2 = n-i = 4-2    11**2
3   12321    1 = n-i = 4-3    111**2
4  1234321   0 = n-i = 4-4    1111**2

金字塔:方法二 金字塔:方法二

打印棱形

打印棱形方法1

使用循环打印的方式

n = int(input('方法1,使用循环打印的方式,N:'))
for i in range(1, 2*n-1+1):
    print(' '*(abs(n-i)), end='')                   #空格数
    for k in range(1, 2*(n-abs(n-i))):              #打印数字
        print(n-abs(i-n)-abs(n-abs(i-n)-k), end='') #当前行的(最大数-|最大数-K|)
    print()

## 方法1,找规律
i    n = 4     空格               每行数字个数(右开,不包含)              最大数                  每一行输出的第K个数的值
1     1      3 = |n-i| = |4-1|   1 = 2*(n-abs(n-i))-1 = 2(4-|4-1|)-1   1 = n-|i-n| = 4-|1-4|   最大数-|最大数-K| = 1-|1-k|
2    121     2 = |n-i| = |4-2|   3 = 2*(n-abs(n-i))-1 = 2(4-|4-2|)-1   2 = n-|i-n| = 4-|2-4|   最大数-|最大数-K| = 2-|2-k|
3   12321    1 = |n-i| = |4-3|   5 = 2*(n-abs(n-i))-1 = 2(4-|4-3|)-1   3 = n-|i-n| = 4-|3-4|   最大数-|最大数-K| = 3-|1-k|
4  1234321   0 = |n-i| = |4-4|   7 = 2*(n-abs(n-i))-1 = 2(4-|4-4|)-1   4 = n-|i-n| = 4-|4-4|   最大数-|最大数-K| = 4-|4-k|
5   12321    1 = |n-i| = |4-5|   5 = 2*(n-abs(n-i))-1 = 2(4-|4-5|)-1   3 = n-|i-n| = 4-|5-4|   最大数-|最大数-K| = 3-|2-k|
6    121     2 = |n-i| = |4-6|   3 = 2*(n-abs(n-i))-1 = 2(4-|4-6|)-1   2 = n-|i-n| = 4-|6-4|   最大数-|最大数-K| = 2-|2-k|
7     1      3 = |n-i| = |4-7|   1 = 2*(n-abs(n-i))-1 = 2(4-|4-7|)-1   1 = n-|i-n| = 4-|7-4|   最大数-|最大数-K| = 1-|1-k|

打印棱形方法1 打印棱形方法1

打印棱形方法2

使用 [1**2, 11**2, 111**2, ……] 的方式

n = int(input('方法2,使用[1**2, 11**2, 111**2, ……]的方式,N:'))
for i in range(1, 2*n-1+1):
    print(' '*(abs(n-i)), end='')   #空格数
    print(int('1'*(n-abs(n-i)))**2) #每一行输出的数值

## 打印棱形方法2,找规律
i    n = 4     空格                几个1                   每行输出的数值
1     1      3 = |n-i| = |4-1|    1 = n-|n-i| = 4-|4-1|    1**2
2    121     2 = |n-i| = |4-2|    2 = n-|n-i| = 4-|4-1|    11**2
3   12321    1 = |n-i| = |4-3|    3 = n-|n-i| = 4-|4-1|    111**3
4  1234321   0 = |n-i| = |4-4|    4 = n-|n-i| = 4-|4-1|    1111**2
5   12321    1 = |n-i| = |4-5|    3 = n-|n-i| = 4-|4-1|    111**2
6    121     2 = |n-i| = |4-6|    2 = n-|n-i| = 4-|4-1|    11**2
7     1      3 = |n-i| = |4-7|    1 = n-|n-i| = 4-|4-1|    1**2

打印棱形方法2 打印棱形方法2