• Aucun résultat trouvé

Versions L’ennui… Sources k Pourjoindrelecompilateurdesexercices: Avant-propos

N/A
N/A
Protected

Academic year: 2022

Partager "Versions L’ennui… Sources k Pourjoindrelecompilateurdesexercices: Avant-propos"

Copied!
37
0
0

Texte intégral

(1)

Recueil d'Exercices Python

version 1.2

Décembre 2017

(2)

Avant-propos

Pour joindre le compilateur des exercices : k

[email protected]

Sources

— Les illustrations sont extraites du cours de Bob Cordeau et Laurent Pointal. Elles ont été réalisées par Hélène Cordeau.

— Les exercices sont inventés ou piochés au gré de mes clics sur la toile. Je citerai notamment : TiProf :

http://tiprof.fr

L’ennui …

L’ennui est entré dans le monde par la paresse. - Jean de La Bruyère -

Aussi, afin d’éviter cette paresse, une fois fini l’ensemble des exercices, il est possible d’aller jouer aux Mathématiques Informatiques, en se rendant sur le site de mon cher ami Laurent Signac :

https ://deptinfo-ensip.univ-poitiers.fr/pydefis/

Versions

Ce recueil évolue en fonction des demandes et de mon temps … toute contribution est la bienvenue.

Décembre 2014 Version initiale 1.0

Janvier 2016 Ajout d’exercices sur 1.1 la récurrence

les expressions régulières

Septembre 2017 Ajout d’exercice CRobot (POO) 1.2 introduction du mot clésuper()

(3)

Chapitre 1

Mise en bouche

Rappel des principales commandes

Typage type ()

Affectation =

Saisie input ()

Commentaires # Ceci est un commentaire

Avant de commencer…

La réalisation des ces travaux pratiques nécessite l’installation de Python 3 et pour plus de commodités de Notepad++ (Windows) ou Scite (Linux).

— Python :https://www.python.org/downloads/

— Notepad++ :http://notepad-plus-plus.org/fr/

— Scite :http://www.scintilla.org/SciTEDownload.html

Langage Python (Windows)

L’interpréteur est lancé par l’item correspondant ajouté dans le menu Démarrer à l’issu de l’installa- tion.

Par exemple :

À l’aide de NotePad++, saisir le script suivant et l’enregistrer sous le nomhellow.py:

#! C:\Python34\python

# -*- coding: UTF-8 -*# pour spécifier le codage des caractères print (5)# affichage de la valeur 5

a = 5

print (a)# affichage du contenu de a

print ("a = ", a)# affichage d'un message et du contenu de a

(4)

2 Mise en bouche

b = 5.50

print("b = ", b)# affichage d'un message, du contenu de a et de b sur la même ligne

c = 5,50,14 print("c = ",c)

texte="Mon texte"

print(texte) print()

nom =input("Quel est votre nom : ") print("nom = ",nom)

# Affichage des types print()

print("type de a: ",type(a)) print("type de b: ",type(b)) print("type de c: ",type(c)) print("type de texte: ",type(texte)) print()

print("type de nom: ",type(nom))

Le chemin de l’exécutable Python est nécessaire pour que le script puisse désigner l’interpréteur qui doit exécuter ce dernier.

Remarque

3

Une fois sauvé avec l’extension.py, le script s’exécute quand on clique sur son icône.

Il est aussi possible d’exécuter le script en ligne de commande :

.\hellow.py

Langage Python (Linux)

L’interpréteur est lancé en ligne de commande par l’exécution de :

python

Cette commande peut être modifiée en fonction de la version, que l’on veut exécuter.

À l’aide de votre éditeur favori, saisir le script suivant et l’enregistrer enhello.py:

#!/usr/bin/python3

# -*- coding: UTF-8 -*# pour spécifier le codage des caractères print (5)# affichage de la valeur 5

a = 5

print (a)# affichage du contenu de a

print ("a = ", a)# affichage d'un message et du contenu de a

b = 5.50

print ("b = ", b)# affichage d'un message, et du contenu de b

c = 5,50,13 print ("c = ",c)

texte="Mon texte"

print (texte) print()

nom = input("Quel est votre nom : ") print ("nom = ",nom)

# Affichage des types print ()

print ("type de a: ",type(a)) print ("type de b: ",type(b)) print ("type de c: ",type(c)) print ("type de texte: ",type(texte)) print ()

print ("type de nom: ",type(nom))

(5)

Mise en bouche 3 Le chemin de l’exécutable Python est nécessaire pour que le script puisse désigner l’interpréteur, qui est capable de l’exécuter.

Pour pouvoir exécuter le script, il faut en premier lieu rendre ce dernier exécutable.

chmod +x hellol.py ./hellol.py

Application directe du cours

1. Écrire un programme, qui définit 3 variables : une variable de type texte, une variable de type nombre entier, une variable de type nombre décimal et qui affiche leur type.

2. Affecterdans une même ligneles 3 variables précédemment définies.

3. Cet exercice est sans rapport avec le précédent …

Écrire un programme qui, à partir de la saisie d’un rayon et d’une hauteur, calcule le volume d’un cône droit :V = 13×π×r2×h.

Comparer la précision de calcul avec votre calculatrice ou celle de l’ordinateur.

4. Une machine découpe dans une plaque, des disques circulaires de rayonrExt, percés d’un trou circulaire de rayonrIntavecrInt < rExtet ne débordant pas du disque.

Quelle est la surface d’un disque découpé ?

Guide :

(a) trouver les données (b) effectuer les calculs (c) afficher le résultat

Application réfléchie

1. Écrire un programme qui affiche le type du résultat des instructions suivantes :

a=3

a==3

2. Écrire un programme, qui ajoute une chaîne de caractères à un nombre entier (Exemple la chaîne

”le chat” et le nombre 3 pour donnerle chat + 3).

3. Écrire un programme, qui donne la mesure de l’angleαd’un triangle rectangle, dont on saisit le côté opposé et l’hypothénuse.

Rappel :sinφ=CoteOppose/Hypotenuse

(6)

4 Mise en bouche

Application avancée

1. Écrire un programme qui réalise la saisie d’un nombre entier puis affiche la valeur ainsi saisie et son type. Essayer de dépasser la taille maximale des entiers (cf. cours C) avec Python 2 et 3. Expliquer.

2. Lors de la saisie d’un nombre par cast (int (input()) : indiquer une chaîne de caractères en lieu et place d’un nombre, rechercher comment éviter ce bug (aide : commandetry)

Culture Générale

1. Quel autre mot courant de l’informatique est issu de la culture Monthy Python ? 2. Qu’est-ce qu’un radian ?

(7)

Chapitre 2

Conditions - Itérations - Répétitions

Rappel des principales commandes

Si if (condition):

Sinon Si elif (condition):

Sinon else:

Pour for variable in

Tant que while condition :

Longueur d’une chaîne len (chaine)

Application directe du cours

1. Écrire un programmemin_max.py, qui demande de saisir 2 valeurs et qui affiche la plus petite des 2 valeurs.

2. Écrire un scriptlongeur_chaine.py, qui demande de saisir 2 chaînes de caractères et qui affiche la plus grande des 2 chaînes (celle qui a le plus de caractères).

3. Écrire le scriptfumeurs.pyvu en cours, en le complétant par des saisies.

4. Écrire le scriptconvertir.py, qui effectue une conversion euros en dollars.

— Le programme commencera par demander à l’utilisateur d’indiquer par un caractère ’E’ ou ’$’

la devise du montant qu’il va entrer.

— Puis le programme exécutera une action conditionnelle de la forme :

ifdevise == 'E' : ...

elifdevise == '$' : ...

else:

...# affichage d'un message d'erreur

5. Écrire un programme, qui affiche 50 fois ”Je dois ranger mon bureau” à l’aide de l’instructionfor.

6. Chanson traditionnelle bretonne La séquence d’instructions

(8)

6 Conditions - Itérations - Répétitions

n=10

print ("C'est dans %d ans je m'en irai j'entends le loup le renard chanter"% n)

permet d’afficher le message :

C’est dans 10 ans je m’en irai j’entends le loup le renard chanter

Écrire une boucle while qui permet d’afficher :

C’est dans 10 ans je m’en irai j’entends le loup le renard chanter C’est dans 9 ans je m’en irai j’entends le loup le renard chanter C’est dans 8 ans je m’en irai j’entends le loup le renard chanter ...

C’est dans 1 ans je m’en irai j’entends le loup le renard chanter

Dans un premier temps, on ne s’occupera pas de la faute d’orthographe de la dernière ligne.

Application réfléchie

1. Écrire le scriptmultiple3.pyqui affiche en fonction d’une valeur saisie l’un des messages suivants :

— ”Ce nombre est pair”

— ”Ce nombre est impair, mais est multiple de 3”

— ”Ce nombre n’est ni pair ni multiple de 3”

Définition

b

Un nombre est multiple de 3 si le reste de la division de ce nombre par 3 est égal à 0. Ce reste est nommé modulo

Syntaxe

.

% permet d’obtenir le modulo en Python 2. Diff́érence entreifetwhile.

On considère les deux programmes suivants :

a = 7.5 ifa > 3 :

a = a-1

a = 7.5 whilea > 3 :

a = a-1

Comprendre, calculer et exécuter le programme, afin de donner la valeur dea.

3. Écrire un programme qui affiche les nombres de 2 en 2 jusqu’à 100 avec unforpuis avec unwhile. 4. Écrire un programme qui affiche les tables de multiplications de 1 à 10.

Aide :utiliser une boucle imbriquée.

Application avancée

1. Écrire un programme qui affiche un joli sapin de Noël, dont la taille est donnée par l’utilisateur.

Exemple pour une taille de 12 lignes :

^

^^^

^^^^^

^^^^^^^

(9)

Conditions - Itérations - Répétitions 7

^^^^^^^^^

^^^^^^^^^^^

^^^^^^^^^^^^^

^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^^^^^

^^^^^^^^^^^^^^^^^^^^^^^

Culture Générale

1. Comment se traduit en Python lei++,i--du C / C++ en Python ?

(10)
(11)

Chapitre 3

Utilisation d’un module : Turtle

Rappel des principales commandes Utiliser Turtle import turtle

Efface tout reset()

Aller à goto (x,y)

Avancer forward (distance)

Reculer backward (distance)

Couleur color (couleur)

Tourner gauche left (angle)

Tourner droite right (angle)

Turtle nécessite l’installation de tk-inker :apt install python-tkouapt install pyton3-tk

Application directe du cours

1. Écrire un programmecarre.pyqui trace un carré.

2. Écrire un programme, qui trace un triangle équilatéral (3 angles à 60°).

3. Écrire un programme, qui trace un hexagone (polygone à 6 côtés, angles interne à 120°).

Application réfléchie

1. Écrire un programme, qui trace un carré, puis un triangle.

Modifier ensuite votre programme pour dessinernfigures consécutives adjacentes.

2. Écrire un programme, qui trace un carré puis un triangle, qui grossissent au fur et à mesure.

(12)

10 Utilisation d’un module : Turtle

Application avancée

1. Écrire un programme, qui trace un cercle (non parfait), sans utiliser la fonctioncirclede Turtle.

2. Écrire un programme, qui trace une étoile.

3. Étudier le code suivant.

#!/usr/bin/python3

# -*- coding: UTF-8 -*- import turtle

turtle.setup (800, 600) # Taille du canevas

wn = turtle.Screen () # La fenêtre d'écran de Turtle wn.bgcolor ("lightblue") # Couleur de fond de la fenêtre wn.title ("Python Turtle") # Définit un titre

tess= turtle.Turtle() # Objet "Turtle"

tess.shape ("turtle") # Une tortue au lieu d'un triangle tess.color ("green") # Tortue verte

tess.goto(200,200) tess.right (90) tess.forward(100) tess.left (90) tess.forward(50)

caroline= turtle.Turtle() caroline.shape ("turtle") caroline.color ("black") caroline.forward (30) caroline.right (90) caroline.forward(100) caroline.left (90) caroline.forward(50)

wn.exitonclick() # On attend un clic sur la croix

Culture Générale

1. Turtle est un module de Python, mais s’inspire d’un langage bien plus ancien. Quel est il ?

(13)

Chapitre 4

Les Listes

Rappel des principales commandes Supprimer un élément d’une liste remove() Ajouter un élément d’une liste append()

Trier une liste sort()

Inverser l’ordre d’une liste reverse()

Pour for variable in

Tant que while condition :

Longueur d’une chaîne len (chaine)

Préambule

Dans l’ensemble des ces exercices, la liste suivante sera utilisée :

— lapin

— chat

— chien

— chiot

— dragon

— ornithorynque

Application directe du cours

1. Écrire un programmeliste_animaux.py, qui initialise la liste et qui affiche l’ensemble des éléments.

2. Afficher la liste de manière inversée.

3. Afficher la liste de manière triée.

4. Ajouter (append) l’élémenttrolldans la liste, puis supprimer l’ensemble des animaux domestiques.

Afficher le résultat. Afin de réaliser la suppression, on créera une liste des animaux domestiques.

(14)

12 Les Listes

Application réfléchie

1. Écrire un programmeliste_chaine.py, qui donne le nombre de caractères de chaque élément de la liste.

Exemple :lapin possède 5 caractères.

Dans les deux exercices suivants, on considèrera un tableau initialisé avec 10 valeurs aléatoires. Le but des exercices est de dire, si la valeur saisie par l’utilisateur est dans la liste ou non.

Afin de vous aider, voici le début des deux programmes.

#!/usr/bin/python3

# -*- coding: UTF-8 -*- import random

tableau_jeu=[]

# Initialisation d'une liste de 10 éléments fori inrange (0,10):

tableau_jeu.append (random.randint (1,10))

2. Recherche séquentielle dans une liste non triée.

Le programme parcourt la liste des valeurs en la comparant une à une à la valeur cherchée, et sort de la boucle :

— soit quand il a parcouru toute la liste sans trouver la valeur

— soit quand la valeur a été trouvée

Si la valeur a été trouvée, le programme annonce ”Gagné”, sinon, le programme annonce ”Perdu”.

3. Recherche séquentielle dans une liste triée.

Le programme trie les valeurs tirées au sort, puis parcourt la liste des valeurs en la comparant une à une à la valeur cherchée. Il sort de la boucle :

— soit quand il a parcouru toute la liste sans trouver la valeur

— soit quand la valeur lue dans la liste est supérieure à la saisie

Si la valeur a été trouvée, le programme annonce ”Gagné”, sinon, le programme annonce ”Perdu”.

4. Jeu de cartes - Une couleur

— Créer un programmejeu_de_cartes.py, qui crée une liste avec l’ensemble des cartes soit :

1,2,…10,V,D,Rsans spécifier la couleur. On se permettra une saisie manuelle des valeurs des cartes.

— Contrôler le contenu de votre liste en l’affichant

5. Jeu de cartes complet Créer une nouvelle liste avec les couleurs, afficher l’ensemble du jeu de cartes.

Exemple :R de Coeur.

Application avancée

2 Jeux de Cartes

— Créer un programmejeu_de_cartes2.py, qui crée deux listes avec l’ensemble des cartes ( soit252 cartes ).

Exemple : "1Coeur"pour As de Coeur.

— Contrôler le contenu de vos 2 listes en les affichant

— On tire 10 cartes au hasard dans chaque jeu. Faire afficher les 10 cartes tirées pour chacun des 2 jeux.

— Trouver les cartes identiques dans les 2 tirages.

(15)

Les Listes 13

Scrabble©

En compétition de Scrabble©, le tirage des 7 lettres est dit valide quand celui-ci comporte au moins 2 voyelles1.

Écrire un programme qui tire les lettres dans un sachet constitué des lettres suivantes (simplifié par rapport au vrai jeu) et qui retire les lettres jusqu’à ce que le jeu soit correct.

On ne vous demande qu’un seul tirage valide donc pas de prise en compte des lettres utilisées dans un précédent tirage …

Instructions : On affichera les tirages incorrects.

— E : 15 lettres

— A : 9 lettres

— I : 6 lettres

— N : 6 lettres

— O : 6 lettres

— R : 6 lettres

— S : 6 lettres

— T : 6 lettres

Aide : Utiliser une liste d’éléments et les fonctions qui lui sont associées …

Faux ami

Problématique de la copie

La copie d’une liste par égal peut faire penser que la copie et son original sont deux éléments dissociés.

Ce n’est hélas pas le cas.

#!/usr/bin/python

a=[1,2,3]

b=a b.append (4) print ("a: ", a) print ("b: ", b)

('a: ', [1, 2, 3, 4]) ('b: ', [1, 2, 3, 4])

Pour réaliser une copie différenciée de l’orginale, il faut soit utiliser le modulecopysoit faire la copie à la main.

Copie manuelle

#!/usr/bin/python

a=[1,2,3]

b=[]

for i ina:

b.append(i) b.append (4) print ("a: ", a) print ("b: ", b)

('a: ', [1, 2, 3]) ('b: ', [1, 2, 3, 4])

Module copy

1. Cette règle est valable pour les 16 premiers tirages

(16)

14 Les Listes

#!/usr/bin/python import copy

a=[1,2,3]

b=copy.deepcopy(a) b.append (4) print ("a: ", a) print ("b: ", b)

('a: ', [1, 2, 3]) ('b: ', [1, 2, 3, 4])

Culture Générale

1. En informatique, qu’est ce qu’un TROLL ?

(17)

Chapitre 5

Fonctions

Rappel des principales commandes

Définition d’une fonction def nom_fonction (param1, param2, ...):

Retour d’une valeur return valeur

Vrai True

Faux False

Préambule

Dans l’ensemble des exercices ci-dessous, il vous est demandé d’écrire des fonctions … mais aussi le programme, qui lui est associé afin de les tester !

Application directe du cours

1. tortue_carre.py: écrire une fonctiondessine_carre, qui fait tracer un carré de 50 pixels de côté à la tortue.

2. Modifier le programme précédent de la façon suivante : (a) la tortue dessine un carré

(b) la tortue tourne de 5°

(c) la tortue avance de 5 pixels (d) la tortue dessine un carré

Et ceci72 fois.

Nommer letortue_carre_tournant.py

3. Modifier le programme précédent de manière à faire des lunettes …

(18)

16 Fonctions 4. pair_impair.py: écrire 2 fonctions :

pair (nbre), qui renvoie True, si le nombre est Pair

impair (nbre), qui renvoie True, si le nombre est Impair

Le nombres sera demandé à l’utilisateur. Le résultat attendu est :"La fonction Pair retourne True pour la valeur 2"

5. mini_maxi.py: écrire 2 fonctions :

mini (a,b)qui renvoie le minimum entre a et b

maxi (a,b)qui renvoie le maximum entre a et b Les 2 nombres a et b seront demandés à l’utilisateur.

Application réfléchie

1. Modifier le programmetortue_carre_tournant.py entortue_carre_couleur.py, pour que la cou- leur du carré soit passée en paramètre à la fonctiondessine_carre.

2. Modifier le programmetortue_carre_couleur.pyentortue_triangle_couleur.py, pour qu’en lieu et place d’un carré, ce soit un triangle équilatéral, qui soit dessiné.

Application avancée

1. tortue_carre_france.py: Reprendre le programmetortue_carre_couleur.pyet créer un liste des trois couleurs du drapeau français, afin de dessiner les carrés avec ces 3 couleurs.

2. palyndrome.py: Créer une fonction qui indique, si une chaîne de caractères est ou non un palyn- drome1.

Aide

Z

La commandelist(chaine)permet de transformer une chaîne de caractères en liste de carac- tères.

La commande"".join(list)permet de transformer une liste en chaîne de caractères.

3. pendu.py: Créer un programme de Pendu.

Culture Générale

1. Qu’est ce qui différencie une procédure d’une fonction ? Citer un langage de programmation, qui différencie ces deux termes dans sa syntaxe.

1. Un palyndrome est un mot qui peut s’écrire dans les deux sens, exemple : radar

(19)

Chapitre 6

Fichiers et module OS

Rappel des principales commandes Ouvrir un fichier open

Fermer un fichier close

Lire dans un fichier read/readline

Écrire dans un fichier write

Application directe du cours

1. Écrire un programmelire_fichier.py, qui lit le fichierloremipsum.txtet l’affiche.

2. temperature.py : Créer un fichier avec un mot par ligne à partir de la liste suivante :

"chaud","froid","tempéré","glacial","brûlant".

3. temperature_add.py : Ajouter à ce fichier les équivalents anglais :

"hot","cold","moderate","icy","ardent"

4. Lister le contenu du répertoire courant.

Application réfléchie

1. dico.py :Lire le fichier dico.txt et en ressortir les palindromes.

Aide

Z

mot = mot.replace("\n", "")permet de supprimer le retour à la ligne d’une chaîne.

 

Culture Générale

1. Qu’est ce que Lorem Ipsum ?

2. En terme SSI, quel peut être l’intérêt de la lecture d’un dictionnaire ?

(20)
(21)

Chapitre 7

Programmation Orientée Objet

Astuce sur les modules

Il est possible de tester les modules écrits directement en utilisantif __name__ == "__main__".

#!/usr/bin/python

# *-* coding: utf-8 *-*

import math

def Aire_Cercle (rayon):

return (math.pi * rayon * rayon )

def Perimetre_Cercle (rayon):

return (2 * math.pi * rayon)

if__name__ == "__main__":

r = int (input ("Votre rayon : ")) print ("Aire : %f" % (Aire_Cercle (r)))

print ("Perimetre : %f" % (Perimetre_Cercle (r)))

#!/usr/bin/python

# *-* coding: utf-8 *-*

from module import *

r = int (input ("Votre rayon : ")) print ("Aire : %f" % (Aire_Cercle (r)))

print ("Perimetre : %f" % (Perimetre_Cercle (r)))

Application directe du cours

Attention

j

Aucune création ou héritage de classe n’est demandé pour les exercices de l’”Application directe du cours”

1. dir_tortue.py :À l’aide de la commandedir, lister l’ensemble des propriétés de l’objet Turtle.

2. 3tortues.py: Écrire un programme qui créer 3 tortues et qui leur fait effectuer des déplacements et des figures identiques, mais en partant d’une position différente.

— Le déplacement sera implémenté sous la forme d’une fonction s’appliquant à un objet de type tortue.

— La figure fera elle aussi l’objet d’une fonction s’appliquant à un objet de type tortue.

(22)

20 Programmation Orientée Objet Nom de la tortue Position de départ

angelo 50,50

donatello 100,100

raphael 150,150

Application réfléchie

1. Créer une classe Cercle (fichierCCercle.py) qui se définit par son rayon.

La classe CCercle aura 2 méthodes, qui permettront de calculer l’aire (π×r2) et le périmètre (2× π×r).

Écrire un programmecercle.pyqui instancie cette classe et utilise ses méthodes.

2. Créer une classe Domino (fichierCDomino.py) qui se définit par la valeur des points sur ce dernier.

La classe CDomino aura 2 méthodes :

affiche_pointsqui affiche le domino

valeurqui donne la somme des points du domino

Écrire un programmedomino.pyqui instancie cette classe et utilise ses méthodes :

— Créer 2 dominos [2,6] et [4,3] et leur appliquer les méthodes

— Créer une liste de 7 dominos [6,valeur de 1 à 6] qui les affiche puis indique la somme de l’en- semble.

Application avancée

Jeu de Cartes

1. CJeuDeCartes.py : Créer un classe CJeuDeCartes qui crée un jeu de 52 cartes.

— Une carte sera composée d’une valeur et d’une forme (coeur, carreau, pique, trèfle).

— Les méthodes suivantes seront implémentées :

nom_carte: affiche le nom d’une carte de manière littérale, ex. Valet de Coeur.

battre: mélange le jeu de cartes (on utilisera la fonctionshuffledu modulerandom.

afficher: permet d’afficher le jeu de cartes.

tirer: permet d’extraireune carte du jeu.

— Vous ferez un jeu de test, qui exécutera les points suivants : (a) Créer un jeu de cartes

(b) Mélanger le jeu de cartes (battre) (c) Afficher le jeu de cartes mélangé

(d) Tirer une à une toutes les cartes et les afficher

(23)

Programmation Orientée Objet 21

Robot

Cet exercice est adapté d’un devoir surveillé écrit par Mlle Imene Sghaier.

1. CRobot.py : Créer une classe CRobot qui crée un robot défini par

— Les caractéristiques suivantes

— Type

— SN : Numéro de Série

— Orientation

— Status (En service, Hors service, En réparation)

— Les méthodes suivantes

— Constructeur Robot () ou Robot (type, sn)

— getType () : retourne le type de robot

— getSN () : retourne le numéro de série du robot

— getOrientation () : retourne l’orientation du robot

— getStatus () : retourne le status du robot

— setOrientation (…) : définit l’orientation du robot

— setEtat(…) : définit l’état du robot

— tourner(…) : tourne le robot d’un1/4de tour

— afficher() : affiche les informations du robot

orientationest un attribut de type entier qui désigne l’orientation du robot.

1 : NORD, 2 : EST, 3 : SUD, 4 : OUEST

tournerpermet de tourner le robot, par défaut vers la gauche

afficherpermet d’afficher l’état, l’orientation, le numéro de série et le type du robot.

Instancier cette classe sur un tableau de 4 robots en utilisant l’ensemble des fonctions pour au moins l’un d’eux.

2. CRobotMobile.py : Créer un classe CRobotMobile qui

— hérite de CRobot

— se caractérise en plus avec les attributs entiersabsetordqui définissent la position du Robot- Mobile

— possède une méthodeavancer (…)qui permet d’avancer le Robot selon son orientation

— si on avance de x vers l’Est, l’abscisse augmente de x

— si on avance de x vers l’Ouest, l’abscisse diminue de x

— si on avance de x vers le Nord, l’ordonnée augmente de x

— si on avance de x vers le Sud, l’ordonnée diminue de x

— possède une méthodeaffichePosition()qui affiche la position (coordonnées).

(a) Écrire un constructeur sans argument de la classe CRobotMobile

(b) Écrire un constructeur à quatre arguments (type, sn, abs, ord) de la classe CRobotMobile (c) Redéfinissez la méthode affiche tout en utilisant celle de la classe mère et la méthode affichePo-

sition()

(d) Écrire un programme qui teste votre CRobotMobile en lui appliquant les actions suivantes : i. Tourner vers l’Est

ii. Avancer de 4 vers l’Ouest iii. Avancer de 6 vers le Nord iv. Avancer de 14 vers l’Est

v. Reculer de 8 vers le Sud

(e) Proposer une amélioration de gestion pour l’orientation du robot …

Culture Générale

1. Une méthode de modélisation s’appuie sur l’objet ou inversement. Quelle est elle ?

(24)
(25)

Chapitre 8

Les Expressions Régulières

Lectures

Lors du parcours de certains sites Python sur les expressions régulières notamment, vous trouverez des syntaxes avec un suffixer.

Afin de bien comprendre ce que ce suffixe produit, voici un exemple et son interprétation.

#!/usr/bin/python3

# -*- coding: utf-8 -*- import re

print (r"\tBonjour, \\n et \n au revoir") print ("\n--\n")

print ("\tBonjour, .* \\n et \n au revoir")

\tBonjour, \\n et \n au revoir --

Bonjour, .* \n et au revoir

Avec

r

Le caractère \est protégé de toute interprétation :

— \t reste \t

— \\n reste \\n

— \n reste \n

Sans

r

Le caractère \n’est pas protégé de toute interprétation :

— \t devient une tabulation

— \\n devient \n

— \n devient un retour chariot

(26)

24 Les Expressions Régulières

Aide

Expressions régulières

Le sitehttp://pythex.org/vous aidera dans la création et la correction de vos expressions régulières, n’hésitez pas à l’utiliser.

Saisie

La lecture d’une chaîne de caractères peut entraîner la prise en compte du retour chariot de fin de saisie, il est possible d’utiliser ce petit code pour enlever ce dernier.

Syntaxe

.

clear = chaine.rstrip(’\r\n’)

La chaîneclearcontient alors la chainechainenettoyée de tout caractères de retour à la ligne.

Exemple

#!/usr/bin/python3

# -*- coding :utf-8 -*- chaine="coucou\n"

print ("Initial : "+ chaine) print ("---") clear = chaine.rstrip('\r\n')

print ("Final : "+ clear) print ("---")

Initial : coucou

--- Final : coucou ---

Application directe du cours

1. Un nombre est composés d’une suite de chiffres. Vérifier que la chaîne saisie est bien celle d’un nombre.

2. Une plaque d’immatriculation est composée de 2 lettres majuscules, un tiret (”-”), 3 chiffres, un tiret (”-”) et enfin de 2 lettres majuscules. Vérifier que la chaîne saisie est bien celle d’une plaque d’im- matriculation.

3. Une adresse IPv4 est composée de 4 nombres entre 0 et 255 séparés par des.. Vérifier que la chaîne saisie est bien celle d’une adresse IP.

4. Une adresse mail est composée de caractères alphanumériques suivis de@suivis d’un.et d’un nom de domaine. Vérifier que la chaîne saisie est bien celle d’une adresse mail.

5. Identifier les expressions reconnnues par les expressions régulières données ci-dessous. Pour se faire, libre à vous de programmer, tester le site ou d’effectuer les tâches manuellement sachant que le mieux est tout de même de comprendre ce que fait chacune de ces expressions.

Cet exercice est extrait du sitehttp://home.gna.org/unix-initiation/website/node190.html

(27)

Les Expressions Régulières 25

Numéro Chaîne Numéro Chaîne

a abc b zzzz xx

c abcdef d 123456 7890 abcaziuz

e yyyy f xyz stuv abc

g xx abcxxxxxxxxx h xAb* 12345

i xAB* 45678 j 98745 xaB* 23654

k abc$ !k ; l 567

m 5666777 n 57

o Suite… du paragraphe p Suite… de l’histoire

q la suite… r Suite.. au prochain numero.

Numéro Expressions Régulières

1 c$ 2 c\$

3 ^abc 4 abc$

5 ^abc$ 6 ^abc.

7 45 8 ^56[67]

9 .56[67] 10 x[Aa][Bb]

11 x[^Aa] 12 [Aa][^b]

13 abcd* 14 566 ?7

15 [r-v] 16 56*7*

17 56+7+ 18 56 ?7 ?

19 566 ?7 20 987|789

21 abc|[def] 22 .*[Aa][Bb].*12.*

23 .*12.*[Aa][Bb] 24 .*[Aa]b.*12.*|.*12.*[Aa]b.*

25 .*([Aa]b.*12.*|.*12.*[Aa]b).* 26 abc[def][m-x]*

27 ^[Ss]uite\.\.\..*

Application réfléchie

1. Modifier le code suivant pour rechercher le contenu de texte compris entre<Erreur></Erreur>dans le fichiervandamne.txten ne prenant pas en compte les espaces inutiles.

#!/usr/bin/python3

# -*- coding: UTF-8 -*- import re

# Chaîne de caractères sur laquelle on va travailler S = 'Bugger all down here on earth!'

print ("\nCas 1\n---\n")

# Expression régulière visant à matcher le texte patt = re.compile('Bugger all\s*(.*)here on (.*)!')

# Match

mobj = patt.match(S)

# Affichage du résultat dans le cas où un pattern correspond ifmobj:

print (mobj.group(1)) print (mobj.group(2)) else:

print ("Not find")

# Attention match analyse la chaîne à partir de son début print ("\nCas 2\n---\n")

# Modification de l'expression régulière visant à matcher le texte patt = re.compile('all\s*(.*)here on (.*)!')

(28)

26 Les Expressions Régulières

# Match

mobj = patt.match(S)

# Affichage du résultat dans le cas où un pattern correspond ifmobj:

print (mobj.group(1)) print (mobj.group(2)) else:

print ("Not find")

# On doit donc le corriger en print ("\nCas 3\n---\n")

# Modification de l'expression régulière visant à matcher le texte patt = re.compile('.*all\s*(.*)here on (.*)!')

# Match

mobj = patt.match(S)

# Affichage du résultat dans le cas où un pattern correspond ifmobj:

print (mobj.group(1)) print (mobj.group(2)) else:

print ("Not find")

Exemple, la saisie de la chaîne :<Erreur> Ceci est une erreur </Erreur>retourneraCeci est une erreur.

Application avancée

1. Analyser le fichierscript.txtpour n’isoler que les commandes (entre crochets). On conservera les crochets à l’affichage.

Puis, dans un second temps, l’erreur pour chaque commande, c’est à dire le 3ème champs séparé d’un | si le second champs est erreur.On affichera uniquement les errreurs différentes des autres.

(a) Écrire un programme qui lit le fichier (b) Isoler les différentes syntaxes à analyser

(c) Créer l’expression régulière ou les expressions régulières succeptibles de répondre au problème.

(d) Tester votre expression sur un échantillon de lignes

(e) Intégrer votre expression régulière dans la lecture du fichier

(29)

Les Expressions Régulières 27

(30)
(31)

Chapitre 9

La Récursivité

Application directe du cours

1. Écrire une programme qui calcule la factorielle de n.

En mathématiques, la factorielle d’un entier naturel n est le produit des nombres entiers strictement positifs inférieurs ou égaux à n. La factorielle est notée !.1

Exemple :6! = 654321

La factorielle est utilisée pour dénombrer le nombre de permutations possibles denéléments.

2. Écrire une programme qui calcule lesnpremiers éléments de la suite de fibbonacci.

La suite de Fibonacci est une suite d’entiers dans laquelle chaque terme est la somme des deux termes qui le précèdent. Elle commence généralement par les termes 0 et 1 (parfois 1 et 1) et ses premiers termes sont : 0, 1, 1, 2, 3, 5, 8, 13, 21, etc.2

Application réfléchie

1. Division Euclidienne.

Tant qu’il nous reste dans a une quantité suffisante pour prendre b, on retranche b de a, c’est-à-dire

1. https://fr.wikipedia.org/wiki/Factorielle

2. https://fr.wikipedia.org/wiki/Suite_de_Fibonacci

(32)

30 La Récursivité qu’on prend une fois de plus b de a et donc le quotient augmente d’une unité. Lorsqu’on ne peut plus retrancher b de a (parcequea < b) alors le reste de la division euclidienne est a.

2. Flocon de von Koch.

Le flocon de von Koch s’obtient en partant d’un segment que l’on partage en 3, la partie du milieu est remplacée par un triangle équilatéral comme ceci :

— Écrire une fonctionlignequi construit cet élément.

— Écrire une fonctiontrianglequi construit cet élément (équilatéral).

— Remplacer lesforwardde la fonction triangle par un tracé de triangle comme défini précédem- ment, vous devriez obtenir :

— Étudier le code suivant.

#!/usr/bin/python2

# -*- coding: UTF-8 -*-

# programme principal from turtle import *

def segment (l,n):

if n==0:

# tracer jusqu'en B forward (l) else:

# dessiner un triangle de équilatéral longueur l/3 segment (l/3,n-1)

left (60) segment (l/3,n-1) right (120) segment (l/3,n-1) left (60) segment (l/3,n-1)

def flocon (l,n):

segment (l,n) right(120) segment (l,n) right(120) segment (l,n)

etape=int(raw_input("Donnez le nombre d'étapes (n) : "))

taille=float(raw_input("Donnez la longueur du côté initial (l) : ")) exitonclick()

(33)

La Récursivité 31

Application avancée

1. Fractale du dragon.

La courbe du dragon se construit ainsi :

— Si t = 0, l’ordinateur doit dessiner une ligne. C’est la base (ou l’initiateur). La longueur a peu d’importance. On définit la longueur une fois avec s.

— Sinon, si t > 0 : Dragon(t) = Dragon (t−1)↱ Dragon (t −1). C’est la règle de récursivité (ou le générateur). L’ordinateur doit dessiner une courbe de dragon avec profondeur de récursion t−1.

Cela donne :

— Dessiner Dragon (t−1)

— Tourner à gauche (90°)

— Dessiner Dragon (t−1)

Il y a un petit problème : on ne peut pas dessiner Dragon(t−1) exactement de la même façon les deux fois. En effet, le premier Dragon (t−1) est dessiné vers l’extérieur en partant du milieu de Dragon(t). Ensuite on tourne de 90°. Le deuxième Dragon(t−1) est dessiné à l’inverse du milieu de Dragon(t) vers l’extérieur. Pour que les deux Dragon(t−1) soit représentée de la même façon, ledeuxième Dragon(t−1) doit être dessiné en miroir. Cela veut dire que tous les angles (a) sont en miroir et (b) doivent être dessinés dans l’ordre inverse.

L’astuce consiste à donner un signe qui indique le sens (vz = 1 veut dire « + », vz = −1 veut dire

« − »). On dessine d’abord un Dragon (t−1) avec signe positif (vz = 1). Ensuite on tourne de 90°

et dessinons un Dragon (t−1) avec signe négatif (vz = −1).

— Dessiner Dragon (t −1) signe (+)

— Tourner à gauche (vz·90°)

— Dessiner Dragon (t−1) signe (−) Écrire le programme.

(34)

32 La Récursivité

(35)

Chapitre 10

Far Away …

Préambule

Aucun cours n’est associé à ces exercices …

Les exercices précédent vous ont donné les bases nécessaires pour un apprentissage approfondi du Python, vous trouverez donc des codes à comprendre, étudier et enfin à adapter.

Map / Dictionnaries

Cette fonctionnalité appelée aussi Table de Hashage permet d’associer un champs à un autre champs.

Exemple :ericberthomier

#!/usr/bin/python3

# -*- coding: UTF-8 -*-

favorite_sports = {

'Ralph Williams' : 'Football', 'Michael Tippett' : 'Basketball', 'Edward Elgar' : 'Baseball', 'Rebecca Clarke' : 'Netball', 'Ethel Smyth' : 'Badminton', 'Frank Bridge' : 'Rugby' }

print(favorite_sports['Rebecca Clarke'])

del favorite_sports['Ethel Smyth']

print(favorite_sports)

favorite_sports['Ralph Williams'] = 'Ice Hockey' print(favorite_sports)

print ("Sport favori de Rebecca Clarke : ",favorite_sports.get('Rebecca Clarke', "Non trouvé")) print ("Sport favori de Eric Berthomier : ",favorite_sports.get('Eric Berthomier',"Non trouvé"))

if"Eric Berthomier" infavorite_sports:

print ("Eric Berthomier est dans la liste") else:

print ("Eric Berthomier n'est pas dans la liste")

(36)

34 Far Away …

Exercice

1

— Choisissez 5 mots de la langue française et créez un dictionnaire qui associe à chacun de ces mots sa traduction en anglais.

— Ajoutez une entrée au dictionnaire de la question précédente (un nouveau mot et sa définition).

— Écrivez une fonctionajoute(mot1, mot2, d)qui prend en argument un mot en français, sa traduc- tion en anglais et ajoute ces deux mots dans le dictionnaireduniquement simot1n’est pas une clé du dictionnaire.

— Écrivez une fonction qui affiche à l’écran toutes les valeurs correspondant aux clés qui sont dans votre dictionnaire (ici, tous les mots en anglais qui apparaissent dans votre dictionnaire).

Indication : on exécute une boucleforsur tous les éléments ded.keys()et l’on renvoie pour chacun la valeur qui lui est associée.

— Écrivez une fonctionsupprime(car, d)qui prend en argument un caractèrecaret un dictionnaire

det supprime du dictionnaire toutes les entrées correspondant à des clés qui commencent par la lettrec.

CSV

Ce module permet de lire / créer un fichier CSV (Comma-separated values).

#!/usr/bin/python2

# -*- coding: UTF-8 -*- import csv

# Transformation du fichier CSV en Dictionnaire file_dico = csv.DictReader(open("exemple.csv"))

# Affichage du dictionnaire print (file_dico)

# Affichage du contenu du dictionnaire forrow infile_dico:

print(row['francais'], row['anglais'])

francais,anglais souris,mouse cameleon,chameleon chien,dog vache,cow epee ,sword licorne,unicorn aigle,eagle dragon,dragon nain,dwarf dragon,smaug noyau,kernel epee ,stormbringer tigre,tiger

Exercice

Modifier le code précédent pour créer un fichierc.csvne contenant que les motsfrançaiscommençant parc. On prendra soin à entourer de guillemets les champs pour les protéger.

Tk

Ce module permet de créer des interfaces graphiques à l’aide de composants appelés Widgets.

1. Extrait de la page personnelle de Victor Poupethttp://www2.lirmm.fr/~poupet/

(37)

Far Away … 35

#!/usr/bin/python3

# -*- coding: UTF-8 -*- from tkinter import *

def traceDroite():

#~ Tracé d'une ligne dans le canevas c

# coordonnées de la ligne

fenetre.create_line(10,190,190,10,width=2,fill="green")

#--- Programme principal ---#

#~ Création de la fenetre : fen = Tk()

# création des widgets (composants) :

fenetre = Canvas(fen,bg='grey',height=200,width=200) fenetre.pack(side=LEFT)

btn1 = Button(fen,text='Quitter',command=fen.quit) btn1.pack(side=BOTTOM)

btn2 = Button(fen,text='Tracer une ligne',command=traceDroite) btn2.pack()

fen.mainloop()# boucle en attente d'événements fen.destroy() # destruction (fermeture) de la fenêtre

Exercice

Modifier le code précédent pour ajouter un bouton qui créee une ligne de taille, de position et de couleur aléatoire.

PythonPlotting (Non présent en standard)

Ce module permet de créer des graphes.

#!/usr/bin/python3

# -*- coding: UTF-8 -*-

import numpy as np import pylab as pl

# Création d'un tableau de valeur en x x = [1, 2, 3, 4, 5]

# Création d'un tableau de valeur en y en adéquation avec les x y = [1, 4, 9, 16, 25]

# Utilisation de pylab pour le tracé en mémoire pl.plot(x, y)

# Affichage du résultat pl.show()

Exercices

1. Modifier le code précédent pour ajouter une nouvelle courbe.

Culture Générale

1. Un langage de programmation porte le même nom qu’une pierre précieuse, quel est il ?

Références

Documents relatifs

- Si vous êtes mariés, choisir : Madame et Monsieur - Si vous êtes pacsés, vie maritale : Madame, Monsieur - Si vous êtes célibataire, divorcé…choisir la bonne civilité.. NOM

Dans ce cas, l’acquéreur devra verser au Trésor, d’ordre et pour le compte du vendeur (partie saisie) et à sa décharge, en sus du prix de vente, les droits découlant du régime

Lors des demandes ultérieures, la personne qui saisit la demande invite le signataire à se connecter à DAUPHIN avec son compte nominatif et à attester en ligne.. Zoom : LE

[r]

ARTICLE 16 — PAIEMENT DES FRAIS DE POURSUITES ET DES EMOLUMENTS Conformément à l'article 1593 du code civil, l'acquéreur paiera entre les mains et sur les quittances de

lorsque la Commission des transports du Québec (CTQ) a émis une interdiction de mettre en circulation ou d’exploiter un véhicule lourd à l’endroit d’un propriétaire ou

Le dossier est sur le statut « en cours de création », il suffit de cliquer sur le crayon pour reprendre votre demande en cours là où vous vous êtes arrêté.. Si vous vous

6 Le dossier est sur le statut « en cours de création », il suffit de cliquer sur le crayon pour reprendre votre demande en cours là où vous vous êtes arrêté.. Si vous vous