Adloun

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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →