Un programme qui lit un programme
Application directe du cours · niveau 1 (application) · NSI (terminale), chapitre 16 — Calculabilité, décidabilité et paradigmes de programmation
É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.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.