Site de Jean-Michel RICHER

Maître de Conférences en Informatique à l'Université d'Angers

Ce site est en cours de reconstruction certains liens peuvent ne pas fonctionner ou certaines images peuvent ne pas s'afficher.


1. Algorithmique et programmation en Python

1.1. Introduction

L'objectif de ce cours est l'apprentissage de l'algorithmique afin de résoudre des problèmes grâce à l'outil informatique. La mise en application est réalisée au travers du langage Python qui dispose de nombreuses bibliothèques et permet de réaliser rapidement des programmes afin de pouvoir les tester.

En ce qui concerne Python, c'est un langage assez récent puisque la première version date de 1991.

Il a été créé par Guido van Rossum et le nom Python fait référence au Monty Python's Flying Circus.

Voici rapidement quelques spécificités du langage :

  • le langage est interprété
  • le typage est dynamique
  • la casse est discriminatoire : on distingue majuscules et minuscules ce qui implique que x et X sont deux choses différentes
  • on utilise les tabulations pour indenter le code et faire apparaître sa structure

1.1.1. langage interprété

On distingue les langages interprétés (PHP, Python) des langages compilés (C, C++).

Pour un langage compilé, un programme appelé compilateur transforme le code en instructions exécutables par le microprocesseur de l'ordinateur.

Pour un langage interprété, un programme appelé interpréteur lit une instruction, l'exécute, puis passe à la suivante.

Le constat est qu'un langage compilé génère du code qui s'exécute beaucoup plus rapidement qu'un langage interprété (cf fractales de Mandelbrot, facteur d'amélioration de 420 / 6 = 70).

On peut, pour mieux appréhender ce concept, utiliser une analogie : imaginons que vous ne parliez que français et que vous soyez amené à consulter un livre en russe. Deux possibilités s'offrent à vous :

  • soit faire traduire une bonne fois pour toute le livre du russe vers le français (compilation)
  • soit demander à un interpréteur de vous traduire en direct le passage que vous désirez lire, cela prendra plus de temps et à chaque fois que vous aurez besoin de lire un passage il faudra faire appel une nouvelle fois à l'interprète

1.1.2. typage dynamique

En informatique, on distingue le typage dynamique du typage statique.

Le typage consiste à attribuer un type (booléen, entier, chaîne, réel, ...) à une variable afin de savoir comment traiter la variable.

1 + 2 => 3
"bonjour " + "Jean-Michel" => "bonjour Jean-Michel" (concaténation)
1 + "bonjour" => ?
"bonjour" + 1 =?> "bonjour1"
"bonjour" + str(1) => "bonjour1"
  • Le typage statique attribue un seul type à une variable pour la durée de son existence.
  • Le typage dynamique consiste à modifier le type d'une variable lorsqu'on lui affecte une valeur.
x = 1 (entier)
y = 3.14 (réel)
s = "bonjour" (chaine)

Notons que le typage dynamique est une notion qui est associée aux langages interprétés.

Par exemple en Python :

>>> x = 10
>>> type(x)
<class 'int'>
>>> x = 3.14
>>> type(x)
<class 'float'>
>>> x = "coucou"
>>> type(x)
<class 'str'>

1.2. Python : bon ou mauvais langage

Python est un bon langage dans le sens ou il permet rapidement de mettre au point des programmes complexes même si on est pas un informaticien chevronné grâce à ses nombreuses bibliothèques.

Cependant c'est un mauvais langage en raison de certaines subtilités : cf. programme

1.3. Logiciels

Je recommande l'utilisation d'Anaconda une distribution libre et open source de Python dont l'objectif est de simplifier la gestion des paquets et leur déploiement (cf installation).

En ce qui concerne les éditeurs :

  • je recommande PyCharm
  • mais on peut également utiliser Spyder livré avec Anaconda (un peu lourd)
  • ou l'éditeur très léger Thonny qui est très facile à utiliser

1.4. Langage algorithmique

Pour en savoir plus sur le langage algorithmique que nous utiliserons, on consultera cette page.

1.5. Mise en pratique

Pour la mise en pratique, on consultera ces pages :

Vous pouvez utiliser la console python afin d'exécuter du code.

Biliothèques Python :

1.6. Sitographie et bibliographie

  • Site web Python
  • Site web documentation de Python
  • Distribution Anaconda de Python
  • Matplotlib
  • Intelligence Artificielle Vulgarisée, Le Machine Learning et le Deep Learning par la pratique, Aurélien Vannieuwenhuyze, Editions ENI, 2019, ISBN 978-2-409-02073-5

1.7. Contrôle Continu

  • Année 2020-2021 :
    • CC à mis parcours :
    • Projet (au choix) :
      1. Jeu Feu de Forêt : Il s'agit de reproduire le jeu qui consiste à éteindre un feu de forêt matérialisé par des flammes qui grandissent au fur et à mesure qu'on termine un niveau. Pour cela un avion situé haut dans le ciel, largue de l'eau et descend petit à petit en se rapprochant du sol. S'il touche une flamme, le jeu se termine, on affiche alors le score obtenu.
      2. Analyse de données : on dispose d'un jeu de données concernant des patients atteints du COVID (attention il s'agit d'un jeu fictif)
  • Année 2019-2020 :
    • CC à mis parcours : sujet groupe 1, sujet groupe 2
    • Projet (au choix) :
      1. Jeu Feu de Forêt : Il s'agit de reproduire le jeu qui consiste à éteindre un feu de forêt matérisalisé par des flammes qui grandissent au fur et à mesure qu'on termine un niveau. Pour cela un avion situé haut dans le ciel, largue de l'eau et descend petit à petit en se rapprochant du sol. S'il touche une flamme, le jeu se termine.
      2. Analyse de données : on dispose d'un jeu de données concernant des étudiants et notamment les notes qu'ils ont obtenu en fin de licence dans différentes matières (maths, physique, chimie, informatique et français) et on désire savoir, globalement et en fonction du sexe, si on peut prédire la moyenne qu'ils auront en master et le fait qu'ils poursuivront en doctorat