制作 table 这样的数字的简单代码

Simple code to make a table of numbers like this

我需要一个简单程序的帮助来打印 table 这样的数字。它只适用于 n 为奇数而不适用于偶数的情况。 喜欢 n = 3, 5, 7, 27 我几乎完成了它,但无法弄清楚到底。首选使用 for 循环的解决方案。 例如,我的代码仅适用于 table(5) 但不适用于 table(9)。

def table(n: int):
    for i in range(n // 2+1):
        for j in range(n):
            if j <= (n // 2):
                print(n-i-j, end="")
            else:
                print(j-i+1, end="")
        print()
    for x in range(n // 2):
        for y in range(n):
            if y <= (n // 2):
                print(n // 2 + x + 2 - y, end="")
            else:
                print(y // 2 + x + 2, end="")
        print()

应该如何:

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

table(9)
my output(wrong):
9 8 7 6 5 6 7 8 9
8 7 6 5 4 5 6 7 8
7 6 5 4 3 4 5 6 7
6 5 4 3 2 3 4 5 6
5 4 3 2 1 2 3 4 5
6 5 4 3 2 4 5 5 6
7 6 5 4 3 5 6 6 7
8 7 6 5 4 6 7 7 8
9 8 7 6 5 7 8 8 9
what it should be:
9 8 7 6 5 6 7 8 9
8 7 6 5 4 5 6 7 8
7 6 5 4 3 4 5 6 7
6 5 4 3 2 3 4 5 6
5 4 3 2 1 2 3 4 5
6 5 4 3 2 3 4 5 6
7 6 5 4 3 4 5 6 7
8 7 6 5 4 5 6 7 8
9 8 7 6 5 6 7 8 9
def table(n: int):
    for i in range(n // 2+1):
        for j in range(n):
            if j <= (n // 2):
                print(n-i-j, end="")
            else:
                print(j-i+1, end="")
        print()
    for x in range(n // 2):
        for y in range(n):
            if y <= (n // 2):
                print(n // 2 + x + 2 - y, end="")
            else:
                # should be this instead of y//2
                print(x + 2 - n//2 + y, end="")
        print()

但实际上你可以一行完成:

n = 9
[[1 + abs(i-n//2) + abs(j-n//2) for j in range(n)] for i in range(n)]

[[9, 8, 7, 6, 5, 6, 7, 8, 9],
 [8, 7, 6, 5, 4, 5, 6, 7, 8],
 [7, 6, 5, 4, 3, 4, 5, 6, 7],
 [6, 5, 4, 3, 2, 3, 4, 5, 6],
 [5, 4, 3, 2, 1, 2, 3, 4, 5],
 [6, 5, 4, 3, 2, 3, 4, 5, 6],
 [7, 6, 5, 4, 3, 4, 5, 6, 7],
 [8, 7, 6, 5, 4, 5, 6, 7, 8],
 [9, 8, 7, 6, 5, 6, 7, 8, 9]]