Aller au contenu

Algo & Prog 1 Python : TP séance 01

Mise en place

  • Démarrez une session Linux (machine virtuelle LUNIX en salle de TP).
  • Ouvrez un terminal (par exemple un "terminal MATE" en salle de TP). Voici un rappel des commandes qui vous seront utiles :

    Commandes utiles dans un terminal
    • pwd : pour afficher le répertoire courant (Print Working Directory)

    • cd répertoire : pour aller dans le répertoire (Change Directory)

    • cd .. : pour revenir dans le répertoire parent

    • ls : pour afficher le contenu du répertoire courant (LiSt content)

    • ls répertoire : pour afficher le contenu du répertoire

    • mkdir répertoire : pour créer un répertoire (MaKe DIRectory)

    • rmdir répertoire : pour supprimer un répertoire vide (ReMove DIRectory)

    • mv ancien_nom nouveau_nom : pour renommer un répertoire ou un fichier (MoVe)

    • rm nom_fichier : pour supprimer un fichier (ReMove)

    • cat nom_fichier : pour afficher un fichier dans le terminal (conCATenate)

    • gedit nom_fichier.py & : pour éditer un fichier en tâche de fond (symbole &)

    • python3 nom_fichier.py : pour exécuter le programme Python.

    Si dans un nom il y a des espaces, il faut le protéger avec des "". Par exemple :
    ls "Mes Documents".

  • Créez un répertoire python-TPxx-NOM1-NOM2, en replaçant xx par le numéro de la séance, NOM1 par votre nom de famille, NOM2 par le nom de famille de votre binôme ou mono si vous êtes seul(e). Il ne doit y avoir aucun espace ou apostrophe dans le nom du répertoire.

    mkdir python-TPxx-NOM1-NOM2
    
  • Allez dans ce répertoire :

    cd python-TPxx-NOM1-NOM2
    
  • puis ouvrez gedit en tapant :

    gedit &
    
  • Découpez mentalement votre écran en 4, placez la fenêtre de gedit sur un quart en haut, le terminal sur le quart en dessous, et le navigateur avec cet énoncé sur la moitié à côté.

  • Dans le navigateur, ouvrez au moins 2 onglets, l'un avec le cours, l'autre avec cette planche de TP.

  • Configurez gedit en allant dans Edition / Préférences, ou ☰ / Préférences :

    • Affichage : afficher numéros de ligne, marge à 80 ;
    • Éditeur : largeur des tabulations à 4, espaces au lieu de tabulation ;
    • Greffons : commentateur de code (vous pourrez ensuite commenter/décommenter des lignes en faisant CTRL-M ou CTRL-SHIFT-M), indicateurs d'espaces.

Rendu du TP

Tous vos fichiers devront être sauvegardés dans votre répertoire python-TPxx-NOM1-NOM2 pour cette séance.

Dans chaque fichier il doit y avoir au début en commentaire : vos NOMS Prénoms ainsi que ceux de votre binôme éventuel.

À la fin de la séance, compressez le répertoire sous la forme d'une archive au format tgz puis téléversez l'archive sur la page Ametice, même si vous n'avez pas fini la planche de TP.

Dans le cas où le TP n'est achevé, il vous est demandé de le terminer chez vous, puis de re-téléverser l'archive dans sa version finale, avant le début de la séance suivante.

Compresser le répertoire

Pour compresser le répertoire, vous pouvez faire clic droit / compresser dans le gestionnaire de fichier, ou taper dans le terminal :

cd ..
tar cvfz python-TPxx-NOM1-NOM2.tgz python-TPxx-NOM1-NOM2
ls
cd python-TPxx-NOM1-NOM2

Exercice 1 : résolution équation second degré, saisie, fonction

1.a. Programme

Écrivez un programme racine2.py qui demande de saisir au clavier 3 réels \(a, b, c\) puis affiche les solutions réelles de l'équation \(ax^2 + bx + c = 0\).

1.b. Vérification

Vérifiez à l'aide d'exemples les 3 cas de figure.

1.c. Fonction

Déplacez le calcul du discriminant dans une fonction

calculer_discriminant (a, b, c)

Positionnez cette fonction avant le programme principal.
Utilisez cette fonction dans la résolution de l'équation, et re-vérifiez.

Exercice 2 : résolution équations linéaires, méthode de Cramer

2.a. Programme

Écrivez un programme lineaire2.py qui demande de saisir au clavier 6 réels \(a_1, b_1, c_1, a_2, b_2, c_2\).

2.b. Fonction

Rajoutez (au début) une fonction calculer_determinant (x1, y1, x2, y2) qui renvoie la valeur du déterminant \(\left|\begin{array}{cc} x_1 & x_2\\ y_1 & y_2\end{array}\right|\) .

2.c. Cramer

Affichez par la méthode de Cramer les solutions du système : \(\left\{\begin{array}{l} a_1 x + b_1 y = c_1 \\ a_2 x + b_2 y = c_2 \end{array}\right.\)

2.d. Vérification

Vérifiez sur des exemples les différents cas de figure.

Exercice 3 : découverte TkInter, dessin polygones réguliers

Dans cet exercice on utilise TkInter pour faire des dessins. TkInter est déjà installé sur les machines en salle TP. Pour reproduire cet exercice chez vous sous Ubuntu ou WSL, vous pouvez installer TkInter en tapant dans un terminal :

sudo apt-get install python3-tk

3.a. Fenêtre de dessin

Recopiez le programme suivant dans un fichier et testez-le.

⚠  ne nommez pas votre fichier tkinter.py car cela provoquerait un import circulaire !!

# 1) Les imports
import tkinter, sys

# 2) Les fonctions

# 3) Le programme principal
fen_princ = tkinter.Tk()      # Init tkinter et crée fenêtre principale

larg = 400 ; haut = 300
zone_dessin = tkinter.Canvas(fen_princ, bg="white", width=larg, height=haut)
zone_dessin.pack()            # Accroche la zone de dessin dans la fenêtre

zone_dessin.create_text(20, 10, text="Ceci est du texte", anchor="nw")
zone_dessin.create_line(30, 200, 330, 100, fill="blue")

fen_princ.mainloop()          # Attend la fermeture de la fenêtre

3.b. Saisie

Au début du programme principal (partie 3), demandez de saisir au clavier le nombre de sommets entier nb_sommets d'un polygone.

Si nb_sommets est strictement inférieur à 2, affichez une erreur et quittez le programme en appelant la fonction sys.exit().

Remplacez "Ceci est du texte" par "Polygone régulier à ... sommets", en utilisant la concaténation et l'opérateur str(), ou un f-string.

3.c. Fonction

Déclarez cette fonction dans la partie 2) :

dessiner_polygone (zone_dessin, x_centre, y_centre, rayon, n_sommets)

Dans la fonction, affichez de manière provisoire une petite croix centrée sur (x_centre, y_centre) de rayon rayon, dessinée avec un segment horizontal et un segment vertical, en vous servant de zone_dessin.create_line.

Pour les paramètres de create_line, voir l'exemple, ou la documentation de Canvas.

Appelez la fonction dessiner_polygone dans le programme principal, à la place de l'appel de zone_dessin.create_line(...), en lui passant en paramètres le centre de la zone de dessin, un rayon un peu plus petit que le rayon de la zone de dessin, et le nombre de sommets.

3.d. Dessiner un polygone

Écrivez le corps de la fonction dessiner_polygone() de manière à dessiner un polygone régulier centré en (x_centre, y_centre), du nombre de sommets et rayon passés en paramètres, et dont le premier sommet (numéro 0) est situé en (x_centre+rayon, y_centre).

Remarque : vous aurez très certainement besoin de math.sin et math.cos

3.e. Affichage multiple

Agrandissez la fenêtre, mettez la saisie du nombre de sommets en commentaire, affichez côte à côte sur plusieurs rangées des polygones réguliers de nombre de sommets successifs à partir de 2, ainsi que leur nombre de sommets en bas à droite de chaque polygone.