I'd recommend you start over. I always start patterns that are mirrored in the x axis by figuring out how to do a quarter of the pattern. I also use a view, so that if you want to change the icons you can.
And so I start with:
def palindrome(n):
view = ''.join(map(str, range(n + 1)))
for size in reversed(range(n + 1)):
half = view[size:]
print(half)
palindrome(3)
3
23
123
0123
After this we know to use view[size]
as the center, and we repeat it size
amount of times.
def palindrome(n):
view = ''.join(map(str, range(n + 1)))
for size in reversed(range(n + 1)):
half = view[size] * size + view[size:]
print(half)
palindrome(3)
3333
2223
1123
0123
From this you will then just have to mirror the output:
def palindrome(n):
view = ''.join(map(str, range(n + 1)))
for sizes in (reversed(range(n + 1)), range(1, n + 1)):
for size in sizes:
half = view[size] * size + view[size:]
print(yield half[:0:-1] + half)
Going forward, you could enter view
into it and make it output whatever you want.
import itertools
def palindrome(view):
n = len(view)
for sizessize in itertools.chain(reversed(range(n)), range(1, n)):
for size in sizes:
half = view[size] * size + view[size:]
yield print(half[:0:-1]) + half
print('\n'.join(palindrome('.|.|')))
|||||||
|.....|
|.|||.|
|.|.|.|
|.|||.|
|.....|
|||||||