
C'est un exercice plutôt compliqué car il y a du travail mathématique à faire avant le travail de programmation.

Il faut observer ce qui se passe ligne par ligne.

Si $n=2$, il faut deux lignes comme ceci :
\begin{center}
\begin{tabular}{|Sc|Sc|Sc|}
\hline
& * & \\
\hline
* &  & *\\
\hline
\end{tabular}

\medskip

Le nombre de colonnes est $c = 3 = 2\times2 - 1$.
\end{center}

\newpage

Si $n=3$, il faut afficher:

\begin{center}
\begin{tabular}{|Sc|Sc|Sc|Sc|Sc|}
\hline
&& * && \\
\hline
&* &  & *&\\
\hline
* &  & * &  & *\\
\hline
\end{tabular}

\medskip

Le nombre de colonnes est $c = 5 = 2\times3 - 1$.
\end{center}

On peut alors conjecturer que le nombre de colonnes nécessaires est :
\[
c = 2n - 1.
\]
Le motif central est \og * \fg{} sur la première ligne, et pour obtenir le motif central de la ligne suivante, on y \og ajoute \fg{} le motif \og \tikz\draw(0,0.1)--(0,0)--(0.25,0)--(0.25,0.1); *\fg{} (une espace vide suivie d'une étoile). On peut donc imaginer une variable \texttt{motif\_central} se formant en prenant ce qu'il y avait avant et en lui ajoutant \texttt{' *'}.

Ensuite, il faut penser aux espaces vides à droite et à gauche qui tiennent sur $\frac{c-m}{2}$ colonnes, où $m$ est la longueur du motif central.

Au final, une fonction possible est la suivante:
\begin{python}
def triangle(n):
    colonnes = 2 * n - 1
    for ligne in range(1,n+1):
        if ligne == 1:
            motif_central = '*'
        else:
            motif_central = motif_central + ' *'

        vide = (colonnes - len( motif_central)) // 2
        motif = vide * ' ' + motif_central + vide * ' '
        print( motif )
\end{python}
Bien entendu, cette solution n'est pas unique.
