Back to Top

Le langage Python

Python, pour tout et pour tous

Avant toute chose, sachez que cet article n’a pas pour but d’être un tutoriel Python, internet regorgeant d’excellentes ressources pour débutants. Le but ici est de présenter la versatilité du langage, et pourquoi Python, c’est le bien. Et si vous ne deviez retenir qu’une chose, c’est que vous devez apprendre Python. Que vous soyez un développeur web ou un scientifique, Python peut répondre efficacement a tous vos soucis. Si si, je vous assure. Ceci étant dit, nous pouvons poursuivre.

Le langage de programmation Python

Pour que les plus débutants d’entre vous ne soient pas perdus, je vais faire un petit topo basique sur le langage. Ceux ayant quelques bases peuvent passer ce paragraphe. Donc Python, c’est un langage interprété, n’espérez donc pas avoir des performances dignes du meilleur programme en C ! Cependant le code est vraiment rapide a écrire, avec peu de mots clé (une vingtaine) et une syntaxe intuitive. Par exemple, si vous souhaitez afficher tous les éléments d’un itérable (un itérable étant « un élément sur lequel on peut boucler »), et bien, de manière très lisible on aura :

for elt in iterable: 
    print(elt)

Vous le comprendrez vite, Python est un langage très expressif, et les codes sont relativement condensés. Et ça, pour un programmeur flemmard -ce qui est une tautologie non ?- c’est vraiment cool. Qui plus est, Python a l’énorme avantage d’être un langage flexible, utilisable dans de nombreux domaines et situations différentes. Evidemment, il ne s’agit pas de dire que Python est le meilleur langage dans chaque domaine d’application, ce n’est clairement pas le cas. Prenons un domaine comme l’embarqué, python peut être appliqué ici, mais un code C sera meilleur. Besoin d’un script qui traite des regex a la pelle ? Perl sera tout indiqué. Mais la force du langage au serpent, c’est d’être malgré tout excellent dans ces domaines, même si il n’est pas le meilleur.

Maintenant, intéressons-nous ensemble à quelques exemples qui me permettent de dire que Python, pour un scientifique ou un développeur web, c’est vraiment top.
Une des forces de python, c’est entre autre le prototypage rapide. Prenons l’exemple du web, parce que il se trouve qu’avec le module Bottle on peut pondre un prototype de site fonctionnel en 30 secondes. Alors certes, c’est du prototypage très minimaliste, mais le code Django serait trop long à faire rentrer dans l’article.
Même pour un dev non web c’est d’une facilité affligeante. Que voulons-nous faire ? Une app web Bottle :

mon_app = Bottle()

Ensuite il faut définir ce qu’on appel les routes, donc en fait définir quoi afficher selon l’url (on est pas sur un tuto de web, je vulgarise, ne vous formalisez pas si vous êtes des gourous du web). Dans notre cas, on va juste faire deux routes, une qui va récupérer tout ce qui arrive a la racine (‘/’) et retourner une vue toute simple, un message avec la date du jour.

@mon_app.route('/')
@view('mon_template.template')
def ma_vue():    
    context = {'titre': "je suis une vue", 'date': date.today()}    
    return context

Voilà. C’est tout. A noter que les « @ » sont ce qu’on appelle en Python des décorateur, ce n’est rien de plus qu’une fonction appliqué a une autre fonction. Cela veux juste dire qu’on applique la fonction « view » a la fonction « ma_vue ». Quand à ceux qui ne savent pas ce qu’est une vue, je vous invite à vous renseigner sur le modèle MVC, une simple recherche Google et vous trouverez votre bonheur! Quand au template, il est ici pour formater le retour, on peut utiliser des variables dans l’html. Ça nous permet ainsi de découpler le front et le back. Les personnes venant du web seront ici en terrain connu, pour l’exemple:

<div align="center">    
{{ date }} : {{ titre }}
</div>

Pour ceux qui doutaient de la rapidité de prototypage, en rajoutant juste la ligne permettant de run l’application, tout fonctionne déjà. Évidemment, la fonction permettant de run s’appelle run.

run(mon_app, host='localhost', port=8080)

Cela se passe de commentaire. Et pour finir et être complet, une petite redirection vers FoutuCode.fr, avec la fonction de redirection…. redirect, oui, c’est évident.

@mon_app.route('/foutucode')
def ma_vue_foutu_code():
    redirect("https://foutucode.fr/")

Avec les imports qui vont bien, tout tourne comme un coucou suisse. Et ça c’est beau.

from bottle import Bottle, run, view, redirect
from datetime import date

mon_app = Bottle()

@mon_app.route('/')
@view('mon_template.template')
def ma_vue(): 
   context = {'titre': "je suis une vue", 'date': date.today()} 
   return context

@mon_app.route('/foutucode')
def ma_vue_foutu_code(): 
   redirect("https://foutucode.fr/")

run(mon_app, host='localhost', port=8080)

Voila, et si vous avez un gros projet vous devriez vous intéresser à Django, qui est plus complet. C’est moins minimaliste, et ça tient la charge. Vous êtes maintenant un pro du web en python, félicitation.

Maintenant, vous êtes un peut-être un scientifique (félicitation), et vous cherchez des solutions a des problèmes multi contraintes? Rien de plus simple. La force de Python réside dans ses modules. En même temps cet exemple peut vous faire découvrir la programmation par contrainte, donc c’est tout bénef. Disons, que vous voulez trouvez les chiffres qui résolvent le système d’équation: FOU*TU = CODE. Chaque lettres est un chiffre, donc FOUTU est un nombre, vous avez saisi le concept. Pour éviter d’avoir trop de solutions, je rajoute une contrainte: toutes les lettres sont différentes. Avec le module adapté, ça va très vite. On déclare le problème comme un problème de résolution de contrainte:

problem = constraint.Problem()

Puis on déclare nos variables, donc nos lettres, comme des chiffres de 0 a 9 :

problem.addVariable('F', range(10))
problem.addVariable('O', range(10))
problem.addVariable('U', range(10))
problem.addVariable('T', range(10))
problem.addVariable('C', range(10))
problem.addVariable('D', range(10))
problem.addVariable('E', range(10))

On créé ensuite la fonction qui va tester que notre équation est vérifiée, elle prend donc les lettres en paramètre et fait le calcul:

def equation(f, o, u, t, c, d, e):
    fou = 100*f + 10*o + u    tu = 10*t + u
    code = 1000*c + 100*o + 10*d + e
    if fou*tu == code:
        return True

On ajoute nos deux contraintes a notre problème, a savoir que les lettres vérifient equation et quelles sont toutes différentes :

problem.addConstraint(equation,"FOUTCDE")
problem.addConstraint(constraint.AllDifferentConstraint())

Plus qu’à faire un affichage pas trop dégueu, et c’est fini (avec l’import évidemment…):

import constraint

problem = constraint.Problem()

problem.addVariable('F', range(10))
problem.addVariable('O', range(10))
problem.addVariable('U', range(10))
problem.addVariable('T', range(10))
problem.addVariable('C', range(10))
problem.addVariable('D', range(10))
problem.addVariable('E', range(10))

def equation(f, o, u, t, c, d, e):
    fou = 100*f + 10*o + u
    tu = 10*t + u
    code = 1000*c + 100*o + 10*d + e
    if fou*tu == code: 
       return True

problem.addConstraint(equation,"FOUTCDE")
problem.addConstraint(constraint.AllDifferentConstraint())

solutions = problem.getSolutions()
for i, solution in enumerate(solutions): 
   print(i, solution, sep=" : ")

Si je développe d’autres exemples, il est probable que le patron me tape sur les doigts sur le clavier parce que l’article est trop long. Mais ce dont je vous parlerais serait sûrement des jeux vidéo, de l’intelligence artificielle ou du développement de logiciel desktop « lourd » dans des articles a part. Les exemples dans ces sujets étant nettement plus longs a rédiger et expliquer.

Par Clément Caffin


Random_content()

Rechercher:





Suis-nous sur les réseaux sociaux!

Instagram

S'abonner