Introduction à Python Résumé Dans ce TP, nous allons aborder plusieurs thèmes en situation réelle. Nous vous proposons un script python déjà formé ; vous allez devoir l’analyser, le comprendre et le modifier. Ce TP dure deux heures, pensez à conserver une trace écrite de votre travail. 1 Début de la séance Pour pouvoir effectuer cette séance, vous devez télécharger le fichier TP2-eleves.py depuis le dossier Informatique du répertoire de votre classe. Sauvegardez-le sur votre espace de travail et ouvrez-le dans Pyzo. Combien de lignes comporte ce fichier ? Quelle bibliothèque est utilisée dans ce TP ? Renseignez-vous sur cette bibliothèque : à quoi sert-elle ? Nous vous recommandons de sauvegarder régulièrement votre travail. Lorsque l’on exécute un programme que l’on a fait soi-même, il est tout à fait possible de faire planter la machine et donc de perdre son travail. 2 Utilisation de l’environnement Nous allons ici étudier certains raccourcis clavier. Dans Pyzo, cliquez sur le menu Exécuter. À quoi correspondent les raccourcis Alt+Entrée , Ctrl+E ? Cliquez maintenant sur le menu Shell. À quoi correspondent les raccourcis Ctrl+L, Ctrl+K ? Dans la fenêtre de script, exécutez une première fois l’ensemble de la page en utilisant un raccourcis clavier. Observez l’affichage dans la fenêtre de terminal et suivez les instructions. À la question “Quel est le numéro de la liste que vous voulez trier ? “, répondre le chiffre 2. Que semble faire ce script ? Sélectionnez ensuite les lignes 87 et 88. Activez la combinaison de touches Alt+Entrée. Comment interprétez-vous le résultat affiché dans le terminal ? Activez maintenant la combinaison Ctrl+L puis sélectionnez les lignes 87 et 88 et effectuer la combinaison Alt+Entrée. Quel est le rôle de la combinaison Ctrl+L ? Faites la combinaison Ctrl+K puis sélectionnez les lignes 87 et 88 et effectuer la combinaison Alt+Entrée. Comment interprétez-vous le résultat ? Quel est le rôle de la combinaison Ctrl+K ? 3 Compréhension du script Exécutez une nouvelle fois le programme, en répondant 0 à la question posée. Lorsque vous exécutez le script complet, le terminal vous affiche la liste L0 telle que définie dans le script. Il n’est cependant rien affiché concernant les autres listes. Nous allons remédier à cela. Quelles sont les lignes qui prennent en charge l’affichage de la liste L0 ? Combien de listes sont définies ? À quelles lignes du programme sont-elles mélangées ? Modifier le programme afin que toutes les listes soient affichées, une première fois lors de leur définition puis une seconde fois après leur mélange. Quel est le nom de la principale procédure définie dans ce script ? À quelle ligne est-elle appelée ? En étudiant ses spécifications (nom, documentation, commentaires) précisez son rôle. 1 . Bien maîtriser son environnement de travail est important. Les raccourcis clavier vous permettent de gagner du temps. 4 Test de la fonction triBulle Nous allons à présent nous focaliser sur la fonction nommée triBulle. Vous savez maintenant le rôle de cette procédure. Puisque vous avez déjà exécuté l’ensemble de la page, la fonction triBulle est en mémoire dans le terminal. Vous pouvez donc l’appeler directement depuis le celui-ci. Exécutez la commande >>> triBulle([3,2,4,1,5]). Que se passe-t-il ? Exécutez la commande >>> L=[3,2,4,1,5] ; triBulle([3,2,4,1,5]); L. Que se passe-t-il ? Exécutez la commande >>> L=[3,2,4,1,5] ; triBulle(L) ; L. Que se passe-t-il ? Comment expliquez-vous ces différences ? Jusqu’à présent, vous n’avez exécuté la fonction triBulle que sur des listes d’entiers. Nous allons étudier le cas d’autres types de listes. Créez une liste contenant les entiers de 1 à 5 puis la lettre a entre guillemets. Exécutez la fonction triBulle sur cette liste. Comment interprétez-vous le message d’erreur ? Créez une liste contenant la première ligne de lettres de votre clavier chacune entre guillemets. On aura par exemple L = ["a","z","e","r","t","y","u","i","o","p"]. Appelez la fonction triBulle sur cette liste, puis affichez L. Que peut-on en déduire de l’opérateur de comparaison en Python ? Créez une liste contenant des mots. Appelez la fonction triBulle sur cette liste, puis affichez-la. Que peut-on en déduire sur l’opérateur de comparaison en Python ? 5 Étude poussée de la fonction triBulle Pour réaliser cette section, vous devez lire attentivement la fonction triBulle. Testez la fonction len(). Que rend-t-elle ? Exécutez la commande >>> for i in range(4): print (i) et comprendre cette instruction. Déroulez à la main l’algorithme de la fonction triBulle sur la liste [3,1,4,2]. Avez-vous effectué des opérations inutiles ? Y’a-t-il des variables qui sont définies et que vous n’avez pas utilisées ? Afin d’éviter ces opérations inutiles, proposez une amélioration de la fonction triBulle. La variable nbechanges est globale et peut donc être modifiée à l’intérieur d’une fonction. Ajoutez une ligne à la fonction echange qui incrémente la variable nbechanges à chaque échange de données. . On rappelle que pour inverser une liste L, il suffit de taper L[::-1] Exécutez la fonction triBulle sur une liste quelconque de 20 éléments, sur une liste de 20 éléments triée, puis sur une liste de 20 éléments triée à l’envers. À chaque fois, affichez la variable nbechanges et relevez le nombre d’échanges effectués. Comparez ces résultats entre les deux versions de triBulle. L’amélioration est-elle efficace sur le nombre d’échanges ? En vous inspirant de ce qui a été fait pour le nombre d’échanges, créez un compteur pour le nombre de comparaisons. Refaire les mêmes tests que précédemment. Votre amélioration est-elle efficace pour le nombre de comparaisons ? Conjecturez dans chacun des cas (amélioré ou non) une formule donnant le nombre de comparaisons en fonction de la taille de la liste initiale. Vérifiez votre conjecture sur des listes de différentes tailles. Peut-on effectuer le même raisonnement sur le nombre d’échanges ? 6 Étude d’un autre algorithme de tri Dans cette section, nous allons voir que pour une même tâche, il existe plusieurs algorithmes. En particulier, il existe de nombreux types de tris : certains sont adaptés à des données pour lesquelles l’échange est facile, d’autres à des données pour lesquelles la comparaison est difficile. . La complexité du tri fusion est optimale : il n’est pas possible de trier plus rapidement une liste d’objets. Apportez les modifications nécessaires au script afin de pouvoir utiliser le tri Fusion. On rappelle que la combinaison Ctrl+R permet de commenter un groupe d’instructions et que la combinaison Ctrl+T permet de les décommenter. Exécutez le tri Fusion sur différentes listes et relevez les nombre d’échanges et de comparaisons. Que peut-on dire sur ce tri par rapport au tri à Bulles ? Conjecturez une formule explicitant le nombre de comparaisons en fonction de la taille de la liste initiale. Effectuez une comparaison avec le tri à Bulles. 2 TP Informatique - Introduction à Python Lycée Montesquieu 7 Pour aller plus loin Si vous avez terminé et fait valider votre travail par votre encadrant, vous pouvez vous attaquer aux questions suivantes. Modifiez la fonction triBulle afin qu’elle trie les éléments à l’envers. Modifiez la fonction triBulle afin qu’elle affiche au fur et à mesure l’évolution de la liste. Lorsque vous triez des cartes, vous n’utilisez pas le tri à bulles. Écrivez l’algorithme de tri des cartes. Écrivez une fonction appelée triCarte qui prendra en argument une liste d’entiers et effectuera son tri à la façon d’un jeu de cartes. TP Informatique - Introduction à Python Lycée Montesquieu 3