• Aucun résultat trouvé

Module os : interaction avec le système d’exploitation

1 import sys 2

3 if len ( sys . argv ) != 2:

4 sys . exit (" ERREUR : il faut exactement un argument .") 5

6 print (" Argument vaut : {}". format ( sys . argv [1]))

Puis on l’exécute sans argument :

1 $ python test .py

2 ERREUR : il faut exactement un argument .

et avec un argument :

1 $ python test .py 42 2 Argument vaut : 42

Notez qu’ici on vérifie que le script possède deux arguments car le nom du script lui-même compte pour un argument (le tout premier).

L’intérêt de récupérer des arguments passés dans la ligne de commande à l’appel du script est de pouvoir ensuite les utiliser dans le script.

Voici à titre d’exemple le scriptcompte_lignes.py qui va prendre comme argument le nom d’un fichier puis afficher le nombre de lignes qu’il contient.

1 import sys 2

3 if len ( sys . argv ) != 2:

4 sys . exit (" ERREUR : il faut exactement un argument .") 5

6 nom_fichier = sys . argv [1] 7 taille = 0

8 with open ( nom_fichier , "r") as f_in : 9 taille = len ( f_in . readlines ()) 10

11 print ("{} contient {} lignes .". format ( nom_fichier , taille ))

Supposons que dans le même répertoire, nous ayons le fichierzoo1.txt dont voici le contenu :

1 girafe 2 tigre 3 singe 4 souris

et le fichierzoo2.txt qui contient :

1 poisson 2 abeille 3 chat

Utilisons maintenant notre scriptcompte_lignes.py :

1 $ python compte_lignes .py

2 ERREUR : il faut exactement un argument . 3 $ python compte_lignes .py zoo1 . txt 4 zoo1 . txt contient 4 lignes .

5 $ python compte_lignes .py zoo2 . txt 6 zoo2 . txt contient 3 lignes .

Notre script est donc capable de :

— Vérifier si un argument lui est donné et si ce n’est pas le cas d’afficher un message d’erreur.

— D’ouvrir le fichier dont le nom est fourni en argument, de compter puis d’afficher le nombre de lignes. Par contre, le script ne vérifie pas si le fichier existe bien :

1 $ python compte_lignes .py zoo3 . txt 2 Traceback ( most recent call last ):

3 File " compte_lignes .py", line 8, in <module > 4 with open ( nom_fichier , "r") as f_in :

5 FileNotFoundError : [ Errno 2] No such file or directory : 'zoo3 .txt '

La lecture de la partie suivante va nous permettre d’améliorer notre scriptcompte_lignes.py.

8.6 Module os : interaction avec le système d’exploitation

Le module os14gère l’interface avec le système d’exploitation.

14.https://docs.python.org/fr/3/library/os.html#module-os

Chapitre 8. Modules 8.7. Exercices

La fonctionos.path.exists() est une fonction pratique de ce module qui vérifie la présence d’un fichier sur le disque dur.

1 >>> import sys 2 >>> import os

3 >>> if os. path . exists (" toto . pdb "): 4 ... print (" le fichier est pré sent ") 5 ... else :

6 ... sys . exit (" le fichier est absent ") 7 ...

8 le fichier est absent

Dans cet exemple, si le fichier n’existe pas sur le disque, on quitte le programme avec la fonctionexit() du module sys que nous venons de voir.

La fonctionos.getcwd() renvoie le répertoire (sous forme de chemin complet) depuis lequel est lancé Python :

1 >>> import os 2 >>> os. getcwd () 3 '/ home / pierre '

Enfin, la fonctionos.listdir() renvoie le contenu du répertoire depuis lequel est lancé Python :

1 >>> import os 2 >>> os. listdir ()

3 ['1 BTA .pdb ', 'demo .py ', 'tests ']

Le résultat est renvoyé sous forme d’une liste contenant à la fois le nom des fichiers et des répertoires. Il existe de nombreuse autres fonctions dans le module os, n’hésitez pas à consulter la documentation.

8.7 Exercices

Conseils : pour les trois premiers exercices, utilisez l’interpréteur Python. Pour les exercices suivants, créez des scripts puis exécutez-les dans un shell.

8.7.1 Racine carrée

Affichez sur la même ligne les nombres de 10 à 20 (inclus) ainsi que leur racine carrée avec 3 décimales. Utilisez pour cela le module math avec la fonctionsqrt(). Exemple :

1 10 3.162 2 11 3.317 3 12 3.464 4 13 3.606 5 [...]

Documentation de la fonctionmath.sqrt() :

https://docs.python.org/fr/3/library/math.html#math.sqrt

8.7.2 Cosinus

Calculez le cosinus de π/2 en utilisant le module math avec la fonctioncos() et la constante pi. Documentation de la fonctionmath.cos() :

https://docs.python.org/fr/3/library/math.html#math.cos Documentation de la constantemath.pi :

https://docs.python.org/fr/3/library/math.html#math.pi

8.7.3 Nom et contenu du répertoire courant

Affichez le nom et le contenu du répertoire courant (celui depuis lequel vous avez lancé l’interpréteur Python). Déterminez également le nombre total de fichiers et de répertoires présents dans le répertoire courant.

Documentation de la fonctionos.getcwd() :

https://docs.python.org/fr/3/library/os.html#os.getcwd Documentation de la fonctionos.listdir() :

8.7. Exercices Chapitre 8. Modules

8.7.4 Affichage temporisé

Affichez les nombres de 1 à 10 avec 1 seconde d’intervalle. Utilisez pour cela le module time et sa fonctionsleep(). Documentation de la fonctiontime.sleep() :

https://docs.python.org/fr/3/library/time.html#time.sleep

8.7.5 Séquences aléatoires de chiffres

Générez une séquence aléatoire de 6 chiffres, ceux-ci étant des entiers tirés entre 1 et 4. Utilisez le module random avec la fonctionrandint().

Documentation de la fonctionrandom.randint() :

https://docs.python.org/fr/3/library/random.html#random.randint

8.7.6 Séquences aléatoires d’ADN

Générez une séquence aléatoire d’ADN de 20 bases de deux manières différentes. Utilisez le module random avec la fonctionrandint() ou choice().

Documentation de la fonctionrandom.randint() :

https://docs.python.org/fr/3/library/random.html#random.randint Documentation de la fonctionrandom.choice() :

https://docs.python.org/fr/3/library/random.html#random.choice

8.7.7 Séquences aléatoires d’ADN avec argument

Créez un scriptdna_random.py qui prend comme argument un nombre de bases, construit une séquence aléatoire d’ADN dont la longueur est le nombre de bases fourni en argument, puis affiche cette séquence.

Le script devra vérifier qu’un argument est bien fourni et renvoyer un message d’erreur si ce n’est pas le cas. Conseil: pour générer la séquence d’ADN, vous utiliserez, au choix, la fonction

random.randint() ou random.choice() abordées dans l’exercice précédent.

8.7.8 Compteur de lignes

Améliorez le scriptcompte_lignes.py dont le code a été donné précédemment de façon à ce qu’il renvoie un message d’erreur si le fichier n’existe pas. Par exemple, si les fichierszoo1.txt et zoo2.txt sont bien dans le répertoire courant, mais paszoo3.txt :

1 $ python compte_lignes .py zoo1 . txt 2 zoo1 . txt contient 4 lignes .

3 $ python compte_lignes .py zoo2 . txt 4 zoo2 . txt contient 3 lignes .

5 $ python compte_lignes .py zoo3 . txt 6 ERREUR : zoo3 . txt n' existe pas .

8.7.9 Détermination du nombre pi par la méthode Monte Carlo (exercice +++)

Soit un cercle de rayon 1 (en trait plein sur la figure8.1) inscrit dans un carré de côté 2 (en trait pointillé). Avec R = 1, l’aire du carré vaut (2R)2soit 4 et l’aire du cercle vaut πR2soit π.

En choisissant N points aléatoires (à l’aide d’une distribution uniforme) à l’intérieur du carré, la probabilité que ces points se trouvent aussi dans le cercle est :

p=aire du cercle aire du carré =

π 4 Soit n, le nombre de points effectivement dans le cercle, il vient alors

p= n N =

π 4, d’où

Chapitre 8. Modules 8.7. Exercices

FIGURE8.1 – Cercle de rayon 1 inscrit dans un carré de côté 2.

π = 4 × n N.

Déterminez une approximation de π par cette méthode. Pour cela, pour N itérations :

— Choisissez aléatoirement les coordonnées x et y d’un point entre -1 et 1. Utilisez la fonctionuniform() du module random.

— Calculez la distance entre le centre du cercle et ce point.

— Déterminez si cette distance est inférieure au rayon du cercle, c’est-à-dire si le point est dans le cercle ou pas. — Si le point est effectivement dans le cercle, incrémentez le compteurn.

Finalement calculez le rapport entre n et N et proposez une estimation de π. Quelle valeur de π obtenez-vous pour 100 itérations ? 1000 itérations ? 10 000 itérations ? Comparez les valeurs obtenues à la valeur de π fournie par le module math.

On rappelle que la distance d entre deux points A et B de coordonnées respectives (xA, yA) et (xB, yB) se calcule comme : d=

q

(xB− xA)2+ (yB− yA)2

Documentation de la fonctionrandom.uniform() :

Chapitre 9

Fonctions

9.1 Principe et généralités

En programmation, les fonctions sont très utiles pour réaliser plusieurs fois la même opération au sein d’un programme. Elles rendent également le code plus lisible et plus clair en le fractionnant en blocs logiques.

Vous connaissez déjà certaines fonctions Python. Par exemplemath.cos(angle) du module math renvoie le cosinus de la variableangle exprimé en radian. Vous connaissez aussi des fonctions internes à Python comme range() ou len(). Pour l’instant, une fonction est à vos yeux une sorte de « boîte noire » (voir figure9.1) :

1. À laquelle vous passez aucune, une ou plusieurs variable(s) entre parenthèses. Ces variables sont appelées arguments. Il peut s’agir de n’importe quel type d’objet Python.

2. Qui effectue une action.

3. Et qui renvoie un objet Python ou rien du tout.

Par exemple, si vous appelez la fonctionlen() de la manière suivante :

1 >>> len ([0 , 1, 2]) 2 3

voici ce qui se passe :

1. vous appelezlen() en lui passant une liste en argument (ici la liste [0, 1, 2]); 2. la fonction calcule la longueur de cette liste ;

3. elle vous renvoie un entier égal à cette longueur.

Autre exemple, si vous appelez la méthodema_liste.append() (n’oubliez pas, une méthode est une fonction qui agit sur l’objet auquel elle est attachée par un point) :

FIGURE9.1 – Fonctionnement schématique d’une fonction.