TP de M1207 - Programmation Python IUT1 R&T - 1ère année - 2016/2017 Liens utiles Documentation Python : https://docs.python.org/2.7/ TP 1 1.1 Prise en main de PyScripter Introduction et configuration de PyScripter Pour les TP de programmation en Python, nous utiliserons l’IDE 1 PyScripter, installé sur votre poste en Windows. Lancez PyScripter par le Menu Demarrer > Tous les programmes > Programmation Python (cliquez sur Débloquer si le pare-feu tente de bloquer des fonctionnalités). Configurez ensuite PyScripter pour un travail aisé comme indiqué ci-dessous. Interface utilisateur I Choix de la langue : dans le menu View > Language, configurez la langue de l’interface utilisateur dans votre langue préférée (idéalement en français). I Choix de la police : dans le menu Outils > Options > Options de l’éditeur, puis dans la section Police de l’éditeur, sélectionnez une police adaptée à l’écriture de code (police Deja Vu par exemple). I Choix des numéros de ligne : dans le menu Outils > Options > Options de l’éditeur, puis dans la section Bordure, cochez Afficher les numéros de ligne. Environnement de développement Ouvrir le menu Outils > Options > Options de l’IDE. I Complétion : dans la section Code Completion, décochez le champ Complete with word-break characters, puis décochez Auto-complete with one entry. Enfin, ajoutez aux attributs du champ Special package les bibliothèques supplémentaires que vous souhaitez parcourir pour la complétion : dans ce module, on utilisera notamment math et turtle. I Erreurs : dans la section Console Python, décochez Aller à l’erreur sur les exceptions. I Encodage : modifiez le champ Encodage de fichier par défaut pour les nouv... pour que soit sélectionné sf UTF8 ; ce choix assurera un encodage en UTF-8 de vos scripts python. Modèles pour les nouveaux modules I Modèle de fichier : dans le menu Fichier > Nouveau > Nouveau Fichier... > Gérer les modèles de fichiers... éditez le modèle de fichier appelé Script Python en le sélectionnant dans la liste déroulante. Remplacez ensuite son nom dans le champ Nom par ”Script PythonIUT ”. Parcourir le code python qui s’affiche dans le champ Modèle pour remplacer le code python de gauche par celui de droite : 1 2 def main () : pass ) 3 4 5 if __name__ == ’ __main__ ’: main () 1 2 # !/ usr / bin / env python # -* - coding : UTF -8 -* - Cette manipulation permettra une meilleure prise en charge des accents sur di↵érentes plate-formes. Sauvegardez ce nouveau modèle en cliquant sur Ajouter. 1. Integrated Development Environment (environnement de développement) 1 TP 1 Prise en main de PyScripter 2 I Choix du modèle par défaut : dans le menu Outils > Options > Options de l’IDE, puis dans la section Interface IDE, remplacez le champ Modèle de fichier pour les nouveaux scripts... par ”Script PythonIUT ”. La configuration de PyScripter est terminée. En cas de besoin, vous pouvez restaurer la configuration par défaut des volets de PyScripter par Menu Affichage > Mise en page > Défaut. 1.2 Prise en main de PyScripter PyScripter présente une interface très complète décrite ci-dessous : Exécution avec le débogueur Exécution du programme Volet explorateur de fichiers, pouvant être basculé avec un explorateur de projet ou de code. Le masquage automatique (Auto Hide) est accessible par le bouton en haut à droite de cette zone. 1.2.1 Volet éditeur de codes avec navigation via les onglets. Les scripts sont nommés par défaut ”module”. Volet console et interpréteur ; les autres onglets permettent l’accès aux outils de développement : pile d’appels, visualisation et surveillance de variables, points d’arrêts, console de sortie, message de l’interpréteur et session interactive. Mode interactif Python peut être utilisé en mode interactif, pour saisir directement les instructions depuis la ligne de commande (ou console Python), à l’invitation du prompt >>>). Quelle version de Python indique cette console ? Évaluation d’expressions Utilisez le mode interactif pour évaluer les expressions suivantes et rappelez quelle est l’opération réalisée ou le résultat produit en précisant le cas échéant le type du résultat : Expression Résultat 20+80 "20"+"80" print "Chaine accentuée avec erreurs à affichage" print u"Chaine accentuée sans erreur gr^ ace à unicode" res = 5.5**2 print res print 1+2, "est le resultat" print "bonjour"*3 13/3 13/3.0 res > 2 annee = 2015 (annee%4 == 0)and (annee%100 !=0) not( annee%4 == 0 )and (annee%100 == 0) Remarque : En Python 2.7, l’affichage (sur console ou dans une pop-up) des caractères accentués de la table ASCII est délicat. Ce problème est résolu en spécifiant que la chaine de caractères est encodée en unicode en lui ajoutant le préfixe u. Par exemple : valeur = input(u"Valeur à saisir :"). TP 1 Prise en main de PyScripter Affichage de variables qui : 3 Toujours dans l’interpréteur, écrire les commandes (2 commandes pour chaque item) 1. a↵ecte à une variable ABC la valeur 123 puis affiche ABC à l’écran avec print. 2. a↵ecte à une variable aBc la valeur 456 puis affiche aBc avec print. 3. a↵ecte à une variable AbC la somme de ABC et aBc puis affiche le résultat à l’écran. Pour finir, affichez le contenu des trois variables ABC, aBc et AbC, en une seule ligne avec un print. Python est-il sensible à la casse ? 1.2.2 Scripts Python Le traditionnel helloWorld.py I Créez votre futur répertoire de travail Z:\Prog\TP1. I Créez un nouveau script python en cliquant sur Fichier > Nouveau > Nouveau Fichier puis en choisissant le modèle ”Script Python IUT ” (créé pendant l’étape de configuration). I Enregistrez le fichier dans votre répertoire de travail sous le nom helloWorld.py. I Tapez le code suivant incluant des commentaires qui commencent par # : 1 2 # Le traditionnel script helloWorld print " Hello World ! " # Affiche une chaine de caracteres Exécution dans l’IDE PyScripter Exécutez le script en cliquant sur le triangle vert (ou de manière équivalente via le raccourci ctrl + F9 ) et observez le résultat dans la console python. Exécution d’un script Python en ligne de commande Le script peut aussi être exécuté dans une console Windows, en ligne de commande. Pour ce faire : I ouvrir une invite de commande Windows (cmd) I placez vous dans votre volume de travail (à l’aide de la commande Z:) I et déplacez vous dans votre répertoire de travail (à l’aide de la commande cd Prog\TP1\). Le contenu de votre répertoire peut être listé avec dir. Exécutez enfin le script à l’aide de la commande : python helloWorld.py. Vérifiez que le résultat est le même qu’avec l’IDE PyScripter. Le debugger ou la bouée de sauvetage dans nombre de situations Dans le script helloWorld.py, à la suite de l’affichage du message ”Hello World ” ajouter les a↵ectations suivantes ; on pourra se servir du mécanisme de complétion (que vous avez configuré précédemment) qui propose au développeur d’accélérer la rédaction de son script en reconnaissant dans la frappe les mots clés du langage ou des noms de variables précédemment utilisés. 1 2 3 4 5 var1 var2 var3 var1 var2 = = = = = 1 2 " ABC " var3 + var2 var3 + var1 Explorateur de code Éditez l’explorateur de code (volet de gauche). Il dresse un inventaire des éléments utilisés. Point d’arrêt Placez le curseur sur la ligne comprenant l’instruction qui affiche ”Hello World ” et pressez la touche F5 . Un point rouge apparait à gauche du code pour signifier un point d’arrêt. Ceci peut aussi être fait aussi par le menu Exécuter > Attacher en point d’arr^ et ou en cliquant dans la zone des points rouges. Exécution avec le debugger Le debugger permet une exécution du script pas à pas (ou plus précisément ligne exécutée à ligne exécutée). Lancez ce mode d’exécution : 1) soit en appuyant sur le rond rouge 2) soit via le raccourci * + F9 3) soit avec le menu Exécuter > Débogueur. Le déroulement du script peut alors être tracé : la ligne candidate à l’exécution (c’est à dire qui va être exécutée) est en surbrillance. Suivi de variables L’évolution des variables est visible dans l’onglet variables du volet du bas ; remarquez qu’il contient un très grand nombre de variables propres à l’environnement Python. On peut aussi créer sa propre liste de variables à surveiller (voire même d’expressions) : sélectionnez l’onglet Surveillance, puis faites ensuite un clic droit dans la zone de Surveillance ; un menu contextuel apparaı̂t dans lequel vous devez choisir Ajouter un point de surveillance ; tapez finalement le nom de la variable à surveiller. Faites cette manipulation pour ajouter la variable var1 et var2 à la liste des variables à supprimer. TP 1 Prise en main de PyScripter 4 Exécution pas à pas Observer pour ce script l’évolution des variables présentes en mémoire (déclaration, valeur, ...) en avançant à chaque fois d’une ligne, par un appui sur la touche F7 . A quel moment le débogueur indique-t-il une erreur dans le code ? Expliquez cette erreur, puis corrigez-la en remplaçant var2 par str(var2) (le transtypage sera revu au TP suivant). Que valent var1 et var2 à la fin du script ? Arrêt du debugger On sort du mode débogueur en appuyant sur le carré rouge ou par ctrl + Alt + F9 . 1.2.3 Premières implémentations Programme note.py : Créez un script nommé note.py. Ce script a↵ecte à une variable note une valeur saisie par l’utilisateur (à l’aide de la commande input) puis affiche à l’aide d’une structure alternative : — ”note validée” si cette note est supérieure ou égale à 10, — ”à rattraper” si cette note est entre 8 (inclus) et 10, — ”recalé” si cette note est inférieure à 8. Rappel : Les instructions d’une structure alternative sont délimitées par l’indentation réalisée par une tabulation ! Un bloc d’instructions peut aussi être indenté par le menu Édition > Code Source ou les raccourcis ctrl + * + I ou ctrl + * + U . Programme date.py : Créez un autre script nommé date.py. Ce script demande à l’utilisateur une date sous la forme d’un jour (entier de 1 à 31), d’un mois (entier de 1 à 12) et d’une année (entier) à l’aide de la commande input. Ce script : • affiche le message ”date non valide” si la date entrée n’est pas valide (cf. exercice du TD2 pour connaitre les conditions de validité d’une date) ou si la date est antérieure au 1er janvier 1583 (limite du calendrier Grégorien). Utiliser des opérateurs booléens not, and, or et traduisez l’expression ”op1 divisible par op2” par not(op1 % op2) • mais, si la date est valide, affiche le jour de la semaine qui lui correspond. Pour cela utilisez l’extrait de code : 1 2 3 4 c a m j = = = = (14 - mois ) /12 annee -c mois + 12 c -2 ( jour + a + a /4 - a /100 + a /400 + 31* m /12) % 7 La valeur de j correspond au jour de la semaine en suivant la correspondance : 0 ! dimanche, 1 ! lundi, 2 ! mardi, etc.... Implémentez et testez ce script au travers de l’IDE. 1.2.4 Formatage des chaines Python supporte le formatage de valeurs en chaines de caractères. Une chaine formatée est constituée : 1. d’une chaine comportant des caractères ainsi que des directives de formatage commençant par %. Cette chaine est dite chaı̂ne de formatage. 2. puis du caractère % 3. puis des valeurs ou des variables associées aux directives par ordre d’apparition dans la chaine de formatage. Dans le cas de multiples variables, celles-ci sont séparées par des virgules et encadrées par des parenthèses. Exemples : >>> foo = " bar " >>> number = 12.34 >>>" % f % s " % ( number , foo ) ’ 12.340000 bar ’ On voit ici l’affichage d’un flottant (%f) contenu dans la variable number et d’une chaine (%s) contenue dans la variable foo. Testez dans un interpréteur (onglet ”Console Python” du volet du bas de PyScripter, par ex.), les instructions suivantes et observez le résultat en fonction des directives de formatage : TP 1 Prise en main de PyScripter 5 >>> print " % d " % 1.23 >>> print " %5 d " % 123 >>> print " %05 d " % 123 >>> print " % x " % 255 >>> print " %10.2 f " % 45.6789 On trouvera une aide succincte à propos de ces formatages et de print sur http://www.jchr.be/python/ manuel.htm#print ainsi qu’une documentation complète sur https://docs.python.org/2/library/stdtypes. html#string-formatting-operations. 1.3 1.3.1 Allez plus loin Utilisation de PyScripter en version portable sur votre machine personnelle. PyScripter existe aussi en version portable c’est-à-dire utilisable sans installation dans un système. PyScripter peut être alors copié et gardera toutes ses fonctionnalités (réglages, scripts ouverts). Pour travailler dans un environnement Windows 32-bits, téléchargez le fichier PortablePython 2.7.3.1.exe (ou PortablePython 2.7.3.1.7z) disponibles sur ftp://ftp.gtrgrenoble.fr/TpInfo/M1207-Prog1/Outils puis lancez l’exécutable. Lors de l’installation, choisissez votre répertoire de destination et décochez la section Modules (ne laissez que Core editors coché). L’installeur place tous les éléments utiles dans <votre repertoire de destination>\Portable Python 2.7.3.1. L’exécutable PortablePython 2.7.3.1.exe peut alors être supprimé. L’installation de PortablePython fournit deux outils : I un interpréteur en ligne de commande : Python-Portable.exe I l’IDE PyScripter : PyScripter-Portable.exe Cette installation pourra être transportée à l’aide d’une clé USB. Libre à vous de continuer à travailler sur un autre poste exécutant Windows. Libre à vous aussi de tester vos scripts sur une autre plate-forme où Python 2.7 est installé (Linux, OsX, etc). La portabilité est assurée pour le langage ainsi qu’un grand nombre de modules que nous utiliserons. 1.3.2 Python sous Linux (optionnel) Interpréteur Python Loguez-vous sous Linux. Ouvrez un terminal et lancez l’interpréteur Python par la commande python. Le prompt >>> précise que l’environnement est celui du langage Python. Quelle est la version du langage ? Testez de nouveau quelques-unes des expressions demandées au 1.2.1. Sortez de l’interpréteur Python à l’aide de la commande exit() ou de la combinaison de touches ctrl + D . Où est situé l’interpréteur Python dans l’arborescence du système Linux ? Scripts en linux Créez un fichier bonjour.py contenant l’instruction python qui affiche à l’écran "bonjour". Exécutez-le dans un terminal en tapant : python bonjour.py. Vérifiez que vous obtenez le résultat attendu. Pour l’instant, le script bonjour.py ne peut pas être interprété de manière autonome (c’est à dire sans être l’argument de la commande python). Pour l’intégrer au système, à l’égal d’un script shell, il faut indiquer au système où il trouvera l’interpréteur Python. Cette indication (comme en shell) est réalisée directement dans le script, à l’aide d’une directive débutant par un shebang (caractères #!) qui doit être le 1er élément lu dans le script. La directive est : — le shebang suivi de la localisation dans l’arborescence de l’interpréteur Python que l’on souhaite invoquer (mais qui malheureusement peut changer d’une installation à une autre), — ou mieux, car assurant la portabilité du code entre installations, #!/usr/bin/env python. L’argument ”python” peut aussi permettre de préciser la version du langage souhaitée. En e↵et, Python évolue toujours et le passage à la version 3 (en 2008) a apporté son lot d’incompatibilités avec les versions 2.x toujours en développement (2.7 en 2010). Par exemple, on pourra préciser à la suite du shebang /usr/bin/env python2.7. Ajoutez la directive #!/usr/bin/env python en première ligne de votre fichier bonjour.py, ajoutez le droit d’exécution à votre script et testez son exécution, cette fois en tapant ./bonjour.py.