'How to print following empty up side down pattern

I am trying to print this following pattern , But not able to frame logic

My code :

for i in range(1,row+1):
    if i == 1:
        print(row * '* ')
    elif i<row:
        print( '* ' + ((row - 3) * 2) * ' ' + '*')
        row = row - 1
    else:
        print('*')

Expected output :

* * * * * * * *
*           *
*         *
*       *
*     *
*   *
* *
*

But my code gives me abnormal output :

* * * * * * * * 
*           *
*         *  
*       *    
*
*
*
*


Solution 1:[1]

@stacker's answer is nifty but mathematically a little overkill. This should do the trick just as well:

row = 8
print(row * '* ')
for i in range(1,row - 1):
    rowlength = (row - i) * 2 - 3
    print('*', end='')
    print(rowlength * ' ', end='')
    print('*')
print('*')

Solution 2:[2]

import math

row = 8;
for i in range(1,row+1):
    if i == 1:
        print(row * '* ')
    elif i<(row * row) / (math.pi / math.sqrt(7)):
        print( '* ' + ((row - 3) * 2) * ' ' + '*')
        row = row - 1
    else:
        print('*')

Output:

* * * * * * * * 
*           *
*         *
*       *
*     *
*   *
* *
*

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 isaactfa
Solution 2