Kambwandj Mutomb Obed
Kambwandj Mutomb Obed
Kambwandj Mutomb Obed
du Congo
Ministère de l’Enseignement Supérieur et Universitaire
Université de Lubumbashi
Faculté Polytechnique
ANNEE-ACADEMIQUE : 2023-2024
APPLICATION RÉFLÉCHIE
2. Écrire un script longeur_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).
APPLICATION AVANCÉ
4.É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 :
CHAP:3 UTILISATION D’UN MODULE “ TURTLE”
1.Écrire un programme carre.py qui 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
4.Écrire un programme, qui trace un carré, puis un triangle.
Modifier ensuite votre programme pour dessiner n figures consécutives adjacentes.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from turtle import *
def dessine_carre(tortue, taille):
for _ in range(4):
tortue.forward(taille)
tortue.right(90)
def dessine_triangle(tortue, taille):
for _ in range(3):
tortue.forward(taille)
tortue.right(120)
# Configuration de la fenêtre Turtle
setup(800, 600)
wn = Screen()
wn.bgcolor(”lightblue”)
wn.title(”Carré et Triangle”)
# Création de la tortue
tortue = Turtle()
tortue.shape(”turtle”)
tortue.color(”green”)
# Tracer un carré
dessine_carre(tortue, 100)
# Se déplacer pour tracer le triangle sans superposition
tortue.penup()
tortue.forward(150)
tortue.pendown()
# Tracer un triangle
dessine_triangle(tortue, 100)
# Attendre que l’utilisateur appuie sur Entrée pour fermer la fenêtre
wn.exitonclick()
APPLICATION RÉFLÉCHIE
5.Écrire un programme liste_chaine.py, qui donne le nombre de caractères de chaque élément
de laliste.
Exemple : lapin possède 5 caractères.
CHAP:5 FONCTIONS
APPLICATION DIRECT AU COURS
1.tortue_carre.py : écrire une fonction dessine_carre, qui fait tracer un carré de 50 pixels de
côté à la tortue.
tortue.forward(5)
# Configuration de la fenêtre
turtle.setup(800, 600) # Taille du canevas
wn = turtle.Screen()
wn.bgcolor(”lightblue”) # Couleur de fond de la fenêtre
wn.title(”Python Turtle”)
# Configuration de la tortue ‘vador’
vador = turtle.Turtle()
vador.up()
vador.goto(-200, 0)
vador.color(”black”)
vador.shape(”turtle”)
vador.speed(5)
vador.down()
# Configuration de la tortue ‘yoda’
yoda = turtle.Turtle()
yoda.up()
yoda.goto(200, 0)
yoda.color(”blue”)
yoda.shape(”turtle”)
yoda.speed(10)
yoda.down()
# Dessiner les carrés et déplacer les tortues 72 fois
for i in range(72):
dessine_carre(vador)
deplace(vador)
dessine_carre(yoda)
deplace(yoda)
# Garder la fenêtre ouverte jusqu’à ce que l’utilisateur la ferme
wn.exitonclick()
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 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 (Merci à Eric Martin pour m’avoir signalé une
erreur).
3.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.
APPLICATION RÉFLÉCHIE
4. Modifier le code suivant pour rechercher le contenu de texte compris entre
<Erreur></Erreur> dans
le fichier vandamne.txt en ne prenant pas en compte les espaces inutiles.
APPLICATION ANVANCÉ
5. Analyser le fichier script.txt pour 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
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import re
# Lecture de l’ensemble du texte
with open(”script.txt”, “r”, encoding=”utf-8”) as f:
scr = f.readlines()
# (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 susceptibles de répondre au problème.
# Expression régulière pour isoler les commandes entre crochets
patt_commandes = re.compile(r’(\[.*?\])’)
# Expression régulière pour isoler les erreurs
patt_erreurs = re.compile(r’\[.*?\]\s*\|\s*error\s*\|\s*(.*)’)
# (d) Tester votre expression sur un échantillon de lignes et (e) Intégrer votre expression régulière dans
la lecture du fichier
for phrase in scr:
# Match pour les commandes entre crochets
result_commandes = patt_commandes.search(phrase)
if result_commandes:
commandes.append(result_commandes.group(1))
# Match pour les erreurs
result_erreurs = patt_erreurs.search(phrase)
if result_erreurs:
lst_erreurs.append(result_erreurs.group(1).strip())
# Affichage des commandes trouvées
print(”\nCommandes trouvées entre crochets :”)
for commande in commandes:
print(”Commande : “ + commande)
# Affichage des erreurs uniques
print(”\nListe des erreurs uniques :”)
i=1
for erreur in sorted(set(lst_erreurs)):
print(str(i) + “: “ + erreur)
i += 1
CHAP: 9 LA RÉCURSIVITÉ
APPLICATION DIRECT
2. Écrire une programme qui calcule les n premiers é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.
APPLICATION RÉFLÉCHIE
3. Division Euclidienne.
Tant qu’il nous reste dans a une quantité suffisante pour prendre b, on retranche b de a, c’est-
à-dire
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 (parceque a < b) alors le reste de la division euclidienne est a.
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 fonction ligne qui construit cet élément.
— Écrire une fonction triangle qui construit cet élément (équilatéral).
— Remplacer les forward de la fonction triangle par un tracé de triangle comme défini précédemment,
vous devriez obtenir :
APPLICATION AVANCÉ
5. 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’im-
portance. 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 Dra-
gon(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.
Cette solution est l’adaptation non optimisée de la solution proposée par l’auteur de cet
exercice.
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
# Courbe du dragon avec instructions Logo
def fcap(angle0):
global angle
# oriente la tortue dans une direction (en degrés)
angle = angle0
def av(d):
# avance en dessinant
global x, y
x2 = x + d * cos(radians(angle))
y2 = y + d * sin(radians(angle))
ligne(x, y, x2, y2)
x = x2
y = y2
def tg(a):
# tourne à gauche de a degrés
global angle
angle -= a
# -------------------------------------------------------------------
def dragon(t, vz):
if t == 0:
av(15)
else:
dragon(t - 1, 1)
tg(vz * 90)
dragon(t - 1, -1)
def dessiner():
fpos(0, 0)
fcap(0)
dragon(10, 1)
done()
setup(800, 800)
dessiner()
input(”Presser entrée pour quitter”)