Enseignements

Python TP 1

Exercices du cours Python (Version 3.x)

Pour ceux qui veulent utiliser python sous Windows: le menu Python se trouve dans le menu Programmes/Langages. Pour cette première séance nous allons utiliser l’editeur intégré IDLE (premier programme du menu Python). Prenez le temps d’explorer les autres programmes de ce menu (à l’exception du programme de désinstall!).

Le premier cours vous a presente le langage Python v 2.5 mais une deuxieme version plus récente est aussi installée sur les machines (version 3.1.X). Commencez donc par lire la documentation de Python, et en particulier la premiere section “What’s new in Python 3.0?” Attention, les exercices qui suivent sont prevus pour la version 3.0… (rendez-vous sur cette page pour les meme exercices avec Python 2.X)

Remerciements

Ces exercices sont très fortement inspirés de la feuille d’exercices préparée par Bob Cordeau , à l’IUT d’Orsay (l’auteur du Cours python).

Premiers pas

Contraitrement au language C, les instructions du language Python peuvent être exécutés directement par l’interpréteur Python, au fur et à mesure qu’on les exécute. Essayons cela. Dans une fenêtre shell, tapez la commande suivante:

~> python
Python 3.0.1 (r301:69561, Feb 13 2009, 20:04:18) [MSC v.1500 32 bit (Intel)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>>

Et voilà, l’interpeteur python est prêt, il attend vos commandes. Essayons par exemple de lui faire afficher bonjour:

>>> print (“bonjour”)
bonjour
>>>

Remarquez la présence des 3 supérieurs (>>>). C’est le prompt de python. Il indique que l’interpréteur Python est prêt pour une nouvelle commande. A l’inverse, quand le prompt ne s’affiche pas, c’est que la commande précédente n’est pas terminée. Regardez par exemple ce qui se passe avec la commande print '''bonjour sans refermer les triples quotes.

>>> print (’ ‘’bonjour)

Essayez maintenant les commandes suivantes, et déduisez-en le rôle des caractères , (virgule) , + (plus) et * (etoile).

>>> print (“bonjour”,”ca”,”va”)
>>> print (“bonjour”+”ca”+”va”)
>>> print (“bonjour”*10)

Retour en haut de la feuille d’exercice

Obtenir de l’aide

Sous windows vous avez certainement remarque que la documentation etait directement accessible a partir du menu Python. N’hesitez pas a l’utiliser pour les TPs. Mais ne negligez pas les autres formes, dont vous aurez certainement besoin un jour, par exemple si vous utilisez Python sur une machine Linux.

Une première façon d’obtenir de l’aide c’est d’utiliser l’aide de l’interpréteur Python:

>>> help()

Welcome to Python 3.0! This is the online help utility.

If this is your first time using Python, you should definitely check out the tutorial on the Internet at http://docs.python.org/tutorial/.

Enter the name of any module, keyword, or topic to get help on writing Python programs and using Python modules. To quit this help utility and return to the interpreter, just type “quit”.

To get a list of available modules, keywords, or topics, type “modules”, “keywords”, or “topics”. Each module also comes with a one-line summary of what it does; to list the modules whose summaries contain a given word such as “spam”, type “modules spam”.

help>

Néanmoins, cette forme d’aide est plutot réservée aux utilisateurs avertis. Pour commencer, il vaut mieux nous tourner vers les formes d’aides destinées aux débutants que l’on trouve en ligne (pensez à les ajouter dans vos bookmarks):

http://docs.python.org/tut/node1.html
le tutoriel de Python (version 2.6 par defaut).
http://docs.python.org/3.0/tut/node1.html
le tutoriel de Python (version 3.0).

Un excellent moyen de se familiariser avec Python. Pensez à le faire par vous même en dehors des cours.

http://docs.python.org/dev/3.0/reference/index.html
le manuel de référence Python. Il contient la documentation complète du langage. Essayez de trouver le temps de le parcourir d’ici quelques temps lorsque vous aurez un peu progressé. On y découvre toujours des choses intéressantes.
http://docs.python.org/3.0/library/index.html
la bibliothèque standard de Python. Elle contient toutes les fonctions utilitaires dont on a besoin couramment. Essayez aussi d’en faire le tour quand vous avez un moment.

Remarquez la présence de la fenêtre de recherche dans les pages d’aide en ligne du manuel et de la librairie Python. Très pratique pour retrouver une fonction ou un module dont on sait qu’il/elle existe mais dont on sait plus comment s’en servir.

Retour en haut de la feuille d’exercice

La calculette python

Essayez et commentez le résultat des commandes suivantes:

>>> 1 * 1000
>>> _ * 1000
>>> 2.18 * 3.4567e-1
>>> 20.0 / 3
>>> 20.0 // 3
>>> 20 /3
>>> 20/ 3.0
>>> 20 // 3.0

Expérimentez quelques opérateurs:

>>> 20 % 3
>>> 2.0 ** 10
>>> 5 ** 2 % 3 # Déduisez-en la priorité des opérateurs
>>> 5 % 2 ** 3 # ici aussi

Essayons de consruire quelques variables, mai attention au choix de leur nom. Essayez et commentez ce qui suit:

>>> a = 2
>>> 2a = 2*a
>>> uneVariable = 5
>>> try = 2

Maintenant, essayons différents types d’affectations de variables:

>>> a = 7 # Affectation d’un entier
>>> msg = “Quoi de neuf ?” # Une chaine de caracteres
>>> msg # un moyen simple de vérifier le contenu d’une variable
>>> print msg # un autre moyen
>>>
msg = “ ” “Une chaine qui s’étend
sur plusieurs
lignes
“ ” “
>>> msg # Quelle différence entre cette façon
>>> print msg # et celle-ci ?

Quelques opérations sur les chaînes:

>>> c1 = ‘abc’
>>> len(c1) # longueur
>>> c2 = ‘defg’
>>> c3 = c1 + c2 # concatenation
>>> c4 = ‘Fi!’
>>> c5 = c4 * 3 # Affichez c5
>>> c6 = (c1 + c4) * 3 # Afichez c6
>>> c7 = c1 + c4 * 3 # affichez c7

Retour en haut de la feuille d’exercice

Séquences, indiçage et extraction

Les chaînes de caractères sont stockées sous forme de tableaux de caractères. Intéressons-nous de plus près aux opérations sur les tableaux.

Souvenez-vous que l’indice du premier élément est toujours 0. Pour le vérifier essayez ceci:

>>> c2 = ‘abcdefg’ # un tableau de caracteres
>>> c2[0]
>>> c2[1]
>>> c2[−1] # on peut aussi compter par la fin …
>>> c2[−3]

Malheureusement, les chaines ne sont pas modifiables. En revanche on peut en utiliser des parties pour en construire d’autres. Essayez par exemple ce qui suit:

>>> s = ‘spam & eggs’ # A la place, on voudrait : ‘Spam & Eggs’
>>> s[0] = ‘S’

Comme la méthode consistant à remplacer directement une partie de la chaine ne fonctionne pas. Essayons autrement, en fabriquant une nouvelle chaine avec des morceaux de l’ancienne. Entrainons-nous un peu d’abord (expliquez les resultats obtenus):

>>> s2 = “abcdefghijk”
>>> s2[1:3]
>>> s2[1:]
>>> s2[:1]
>>> s2[:]
>>> s2[::2]
>>> s2[3:6]

Vous avez compris? Tres bien alors trouvez la solution pour ecrire 'Spam & Eggs' a partir de 'spam & eggs'.

En fait, les chaines de caractères sont l’une des 3 formes de sequence proposées par Python:

  1. Les chaines: tableaux de caractères, non modifiables
  2. Les listes: tableaux d’objets quelconques, modifiables
  3. Les tuples: tableaux d’objets quelconques, non modifiables (mais plus rapides que les listes)

Essayons donc les deux dernières formes:

>>> liste_vide = []
>>> len(liste_vide) # pour verifier
>>> couleurs = [‘bleu’, ‘rouge’, ‘vert’]
>>> couleurs[1] # indicage
>>> couleurs[0:1] # decoupage
>>> couleurs[1] = ‘jaune’ # une liste est modifiable
>>> couleurs[2] = 1.414 # et peut contenir des types differents…
>>> c = [1, 3, couleurs] # … comme des listes par exemple!
>>> a = [0,1,2]
>>> b = [3,4,5]
>>> c = [a,b]
>>> c[0][2]
>>> c[1][0]
>>> c[1][3] # Quel est le probleme ici ?

Passons aux tuples maintenant:

>>> monTuple = (‘bleu’, ‘blanc’, ‘rouge’)
>>> monTuple[0]
>>> monTuple[0] = ‘vert’ # expliquez

Retour en haut de la feuille d’exercice

Ecriture de programmes (modules)

Un module python est un simple fichier contenant des instructions en python. A l’exception du module module main décrit ci-après, le nom du module correspond au nom du fichier. Ainsi le module de nom “toto” correspond simplement au contenu du fichier de nom “toto.py” (ou “toto.pyc”, sa version précompilée). Un module python peut en inclure en un autre. Pour ça, deux solutions:

>>> import math # solution 1: importe tout le contenu du module math
>>> math.sin(0) # il faut donner le nom du module en prefixe
>>> from math import sin # solution 2: importe selectivement un symbole
>>> sin(0) # grace a la solution 2, plus besoin de prefixe

Le module main représente le module principal d’un programme python. Autrement dit celui que l’on demande à python d’exécuter en premier, et qui comporte un module principal, appelé main. Contrairement aux autres modules, il n’y a pas de lien entre le nom du module main et le fichier qui le contient.

La façon la plus simple d’écrire un programme python est donc d’utiliser son éditeur favori et d’y insérer les instructions du programme. Faites un essai, en sauvant les instruction suivantes dans un fichier de nom prog.py:


# Mon premier programme python, quelle aventure !
print "Hello, world!"
 

Ensuite, vous pouvez exécuter ce programme de la façon suivante, depuis un shell Unix:

~> python prog.py
Hello, world!
~>

En fait, tout module python peut se transformer en module principal. C’est même fortement recommandé, afin de tester que le programme ne comporte pas d’erreur (en génie logiciel on appelle cela des tests unitaires). Pour cela, l’astuce consiste a insérer une section d’autotest, qui n’est exécutée que lorsque le module est exécuté en tant que programme principal:

# ici on suppose que le fichier contient les instructions
# qui forment le code du module
# par exemple la fonction suivante:

def ma_func(x):
   """Une fonction qui calcule y=x+1"""
   return x+1

# Si ces instructions sont placees dans le fichier toto.py
# alors dans un autre module python, on peut utiliser la fonction
# ma_func a l'aide de l'instrcution 'import toto'
# ou 'from toto import ma_func

# Mais on peut aussi transformer ce module 'toto' en module main
# en inserant une section d'auto-test:

if __name__ == "__main__":
  # Je peux mettre ici les instructions a executer quand le module
  # est utilise en tant que module main
  print "Je test ma_func avec x=3:", ma_func(3)

Et donc, en supposant que vous avez sauvé le code précédent dans le fichier de nom toto.py, vous pouvez tester son exécution de la façon suivante:

>>> python toto.py
Je test ma_func avec x=3: 4
>>>

Mais je peux aussi utiliser mon module normalement depuis un autre programme principal:


# J'importe d'abord le module (facon 1)
import toto

# Ensuite j'utilise la fonction
print "Le resultat est:", toto.ma_func(10)

Puis, en supposant que le code suivant a été sauvé dans le fichier appel_toto.py:

~> python appel_toto.py
Le resultat est: 11
~>

Mais on peut aussi charger un module directement dans l’interpréteur python utilisé de façon interactive:

~> python
>>> import toto
>>> toto.ma_func(11)
12
>>> help(toto) # pratique non ?

On peut aussi ecommencer les opérations précédentes avec la deuxième forme d’import:

~> python
>>> from toto import ma_func
>>> ma_func(11)
12

On peut aussi combiner les avantages (et incovénients) des deux méthodes:

~> python
>>> from toto import * # TOUT le contenu du module toto
>>> ma_func(11)
12

Dans ce dernier cas, attention au problèmes de masquage et de portée (expliquez).

Pour faire des programmes qui fonctionnent aussi bien sous linux que sous windows, il suffit d’insérer le commentaire suivant sur la première ligne du fichier: #!/bin/env python
(A condition d’avoir défini la variable d’environnement python)

Exemple d’en-tête typique que l’on trouve dans un module python:

#!/bin/env python
# -*- coding: Latin-1 -*-
""" La description generale du module"""
# fichier : module.py
# auteur : Olivier Dalle

from math import sin
from toto import *

...

Retour en haut de la feuille d’exercice

Tutorial

Si vous avez terminé, vous pouvez commencer a suivre le tutorial en ligne de Python, très instructif…

Retour à la page principale…

Page d’Accueil

Enseignements 2017-18

Enseignements Antérieurs

Recherche…

edit SideBar

Blix theme adapted by David Gilbert, powered by PmWiki