在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ 如何用python輸出下列打印方陣?

如何用python輸出下列打印方陣?

輸入n(0<n<=20), 輸出如下方陣(如n=4時):

1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16

回答
編輯回答
離殤
import numpy as np


def num(i=[0]):
    i[0] += 1
    return i[0]


shu_ru = int(input("shu ru "))
a = np.zeros((shu_ru, shu_ru))
k = 1
all = []

while k < shu_ru * 2:
    lst = []
    for i in range(k):
        for j in range(k):
            if i + j == k - 1 and i < shu_ru and j < shu_ru:
                lst.append((i, j))
    if k % 2 == 0:
        lst.reverse()
    k += 1
    all.append(lst_p)

for i in all:
    for j in i:
        a[j] = num()

當(dāng)a = 3,輸出

Out[1]: 
array([[1., 3., 4.],
       [2., 5., 8.],
       [6., 7., 9.]])

當(dāng)a = 4,輸出

Out[2]: 
array([[ 1.,  3.,  4., 10.],
       [ 2.,  5.,  9., 11.],
       [ 6.,  8., 12., 15.],
       [ 7., 13., 14., 16.]])

當(dāng)a = 1,輸出

Out[2]: array([[1.]])

代碼寫的比較直白,沒有優(yōu)化,大概就是從下標(biāo)跟你的輸入值的關(guān)系著手分析。

2018年4月18日 01:03
編輯回答
使勁操
n = 4
c = 1
s = [[0 for _ in range(n)] for i in range(n)]

# 左上三角
for i in range(n):
    for j in range(i+1):
        a, b = (i-j, j) if i%2 != 0 else (j, i-j)
        s[a][b] = c
        c += 1
# 右下三角        
for i in range(n, n*2):
    for j in range(1, n*2-i):
        a, b = (n-j, i-n+j) if i%2 != 0 else (i-n+j, n-j)
        s[a][b] = c
        c += 1
# 打印結(jié)果        
for i in s:
    print(i)

輸出結(jié)果

[1, 3, 4, 10]
[2, 5, 9, 11]
[6, 8, 12, 15]
[7, 13, 14, 16]
2018年6月3日 06:08