Construire un tableau de valeurs en Python est chose aisée à l’aide d’une boucle “for”… Aisé ? Réellement ? Obtenir les images de plusieurs valeurs l’est, mais construire un beau tableau l’est-il ? Je ne vais pas vous parler de LaTeX car je suis conscient que tout le monde ne passe pas par ce langage de programmation. Je vais rester en Python pur.
La boucle “for” pour obtenir les valeurs
Nous allons considérer une fonction quelconque f. Alors, pour calculer l’image des nombres entiers compris entre -5 et 5 (par exemple) est facile:
def f(x): return -300*x + 1 for x in range(-5,6): print( x , f(x) )
Quand on ne s’attarde pas trop sur l’affichage, tout devient très simple…
Mais si l’on souhaite que l’affichage soit plus soigné, c’est autre chose!
Construire un tableau de valeurs de fonctions en Python en formatant l’affichage
Quand j’écris “soigner l’affichage”, je veux dire obtenir ceci par exemple:
Il sera nécessaire, pour obtenir ce résultat, d’utiliser le formatage de chaînes de caractères… et un peu de malice! Pour rappel, je vous parle de formatage de chaînes de caractères sur cette page.
Voici un programme possible:
def f(x): return -300*x + 1 def tab(a,b): L = [ f(x) for x in range(a,b+1) ] M = max( [ abs(x) for x in L ]) w = len( str(M) ) # largeur minimale des cellules du tableau if w < 4: w = 4 if M not in L: # s'il y a un signe "-" devant le nombre le plus "spacieux" w += 1 top_line_col = ' ' + '-'*(w+2) top_line = top_line_col * ( len(L) + 1 ) # ligne du haut formatage = '{:^'+str(w+2)+'}' # pour centrer les valeurs sur une colonne de taille w+2 x_line = '|' + formatage.format('x') for x in range(a,b+1): x_line += '|' + formatage.format(x) x_line += '|' y_line = '|' + formatage.format('f(x)') for y in L: y_line += '|' + formatage.format(y) y_line += '|' tab = top_line + '\n' + x_line + '\n' + top_line + '\n' + y_line + '\n' + top_line return tab print( tab(-5,5) )
Le bel avantage est ici que la taille des colonnes s’adapte à la grandeur des nombres.