Вы пытаетесь напечатать пирамиду из N строк с двумя циклами for, используя диапазон. Таким образом, сумма длин ваших двух диапазонов должна быть N.
Теперь рассмотрим сумму for i in range(1, N - 1)
и for i in range(1, N - 2)
с некоторым большим N. Например, N = 99:
len(range(1, 99 - 1)) + len(range(1, 99 - 2))
>>> 193
Это ваша первая ошибка. Функция работает только с N = 5 из-за двух минусов, которые вы выбрали для своих диапазонов. Здесь вам нужно переписать вашу математику:
len(range((99+1)//2)) + len(range((99-1)//2))
>>> 99
Обратите внимание, что я удалил начальное значение из диапазонов, так как оно здесь не нужно. По умолчанию диапазон начинает отсчитываться от 0 и заканчивается одним числом перед конечным значением.
Вторая ошибка, которую вы имеете, связана с тем, как вы печатаете нижнюю половину треугольника. По сути, вы пытались перевернуть все, чтобы напечатать все в обратном порядке, но это каким-то образом сломало логику c. Здесь мы хотим напечатать k пустых мест для каждой строки, увеличивая k на два для каждой строки.
Функция с минимальными исправлениями:
N = int(input())
k = 1
for i in range((N+1)//2):
for j in range(1, N + 1):
if(j <= N - k):
print(' ', end = '')
else:
print('*', end = '')
k = k + 2
print()
k = 2
for i in range((N-1)//2):
for j in range(1, N + 1):
if(j > k):
print('*', end = '')
else:
print(' ', end = '')
k = k + 2
print()