Rysowanie strzałki z gwiazdek

0
n=int(input("Podaj n : "))
i=0
while(i<n):
  j=0
  while(j<n):
    j=j+1
    print('*',end=' ')
  i=i+1
  print()
for i in range(n-1,0,-1):
  print(" "*(n-i)+"* "*i)
* * * * * * * 
* * * * * * * 
* * * * * * * 
* * * * * * * 
* * * * * * * 
* * * * * * * 
* * * * * * * 
* * * * * * * * 
* * * * * * * 
 * * * * * * 
  * * * * * 
   * * * * 
    * * * 
     * * 
      * 

Podpowie ktoś co poprawić żeby strzałka wyglądała jak ta w załączniku?
Z góry dziękuję za pomoc ;)

1

Może w ten sposób będzie prościej?

n = 7

for i in range(n):
    print(' ' + n*'X')

for i in range(sum(divmod(n, 2))+1):
    print(' '*i + (n+2 - 2*i)*'X')
0

Takie coś?

https://ideone.com/DjcKYm

Nie wiem jak bardzo n ma wpływać na wymiary strzałki...
Więc wpływa na szerokość i długość linii, a grot jest rysowany od szerokości n + 2.
n powinno być nieparzyste, bo inaczej w konsoli nie narysuje dobrego grotu.

2

Zamiast ręcznie liczyć szerokość linii, można po prostu justować w funkcji format. Dla czytelności bez generowania samych danych dla szerokości n=13:

for i in [
    '*' * 11,
    '*' * 11,
    '*' * 11,
    '*' * 11,
    '*' * 11,
    '*' * 11,
    '*' * 11,
    '*' * 13,
    '*' * 11,
    '*' * 9,
    '*' * 7,
    '*' * 5,
    '*' * 3,
    '*' * 1,
]:
    print('{:^13s}'.format(i))
0

@Spearhead: fajne, można by uprościć to jeszcze f-stringami:

for x in [11,11,11,11,11,11,11,13,11,9,7,5,3,1]:
    print(f"{'*'*x:^13}")

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.