因應(?)PYTHON的老師出了一個作業是螺旋陣列

大概就是長這樣

輸入:W12A1.py 1 2 3 4 5 6 7 8 9 10 11 12 4 3

實在不知道怎麼寫,只好土法煉鋼一個一個填上去了@@

CODE在這裡

def rotate(listtmp, m, n):
    # 建立一個LIST,用以填入數字,其中多建立一個外圈作為牆壁,並將內容填入 -1
    l2 = [[-1 for i in range(int(n) + 2)]for i in range(int(m) + 2)]
    for i in range(1, len(l2) - 1):  # 除了最外圍,其餘填入0
        for j in range(1, len(l2[i]) - 1):
            l2[i][j] = 0
    # 到這裡,最外圍變成-1,其餘為0,-1代表牆壁,避免填出範圍
    x = 0    # X填到哪裡
    y = 1    # Y填到哪裡
    inl = 0    # 輸入串列目前輸入到哪裡
    trave = "R"    # 目前填的方向
    while inl < len(listtmp):    # 直到所有輸入的值都被填入
        # 向RIGHT填入
        if(trave == "R"):
            x += 1
            while(l2[y][x] != -1 and l2[y][x] == 0):
                l2[y][x] = listtmp[inl]
                x += 1
                inl += 1
            trave = "D"
            x -= 1
        # 向Down填入
        if(trave == "D"):
            y += 1
            while(l2[y][x] != -1 and l2[y][x] == 0):
                l2[y][x] = listtmp[inl]
                y += 1
                inl += 1
            trave = "L"
            y -= 1
        # 向LEFT填入
        if(trave == "L"):
            x -= 1
            while(l2[y][x] != -1 and l2[y][x] == 0):
                l2[y][x] = listtmp[inl]
                x -= 1
                inl += 1
            trave = "U"
            x += 1
        # 向UP填入
        if(trave == "U"):
            y -= 1
            while(l2[y][x] != -1 and l2[y][x] == 0):
                l2[y][x] = listtmp[inl]
                y -= 1
                inl += 1
            trave = "R"
            y += 1
    for i in range(1, len(l2) - 1):
        print("\n")
        for j in range(1, len(l2[i]) - 1):
            print("{0: >3}".format(str(l2[i][j])), end=' ')


if __name__ == "__main__":
    numlist = [None for i in range(len(sys.argv) - 3)]
    for i in range(1, len(sys.argv) - 2):
        numlist[i - 1] = sys.argv[i]
    rotate(numlist, sys.argv[len(sys.argv) - 2], sys.argv[len(sys.argv) - 1])
    # W12A1.py 1 2 3 4 5 6 7 8 9 10 11 12 4 3