NSI (terminale) · Chapitre 16 · Application directe du cours
Un programme qui lit un programme
Calculabilité, décidabilité et paradigmes de programmation · niveau 1 (application)
Énoncé
Un programme qui lit un programme.
Écrire une fonction statistiques(source) qui reçoit le code source d'un programme Python sous forme de chaîne et renvoie un dictionnaire donnant le nombre de lignes, le nombre de définitions de fonctions et le nombre de lignes de commentaire. Vérifier ensuite que le programme analysé reste exécutable.
Corrigé
Le code n'est ici qu'un texte : on le découpe et on compte.
def statistiques(source):
lignes = source.split("\n")
nb_def = 0
nb_commentaires = 0
for ligne in lignes:
nette = ligne.strip()
if nette.startswith("def "):
nb_def = nb_def + 1
if nette.startswith("#"):
nb_commentaires = nb_commentaires + 1
return {"lignes": len(lignes), "def": nb_def,
"commentaires": nb_commentaires}
CODE = """# calcul du carre
def carre(x):
return x * x
# calcul du cube
def cube(x):
return x * carre(x)
"""
print(statistiques(CODE))
# {'lignes': 8, 'def': 2, 'commentaires': 2}
espace = {}
exec(CODE, espace)
print(espace["cube"](4)) # 64
La même chaîne CODE a servi deux fois : d'abord comme donnée à analyser, puis comme programme à exécuter.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 8 autres exercices corrigés dans ce chapitre
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.