====== Exercice : corriger les fautes dans un fichier programme ====== * On vous propose un fichier programme. **Peu importe ce que fait ce programme !** * Vous devez pouvoir corriger les fautes sans même savoir comment il fonctionne. * L'idée est que vous lisiez l'erreur et que vous deviniez ce qui ne va pas, et que vous le corrigiez. Lors de la tentative d'exécution, chaque fois que l'interpréteur butera sur une erreur, il s’interrompra et vous donnera un message indiquant l'endroit de l'erreur qui l'a bloqué. Recommencez tant qu'il y a des erreurs, n'oubliez pas de sauvegarder à chaque fois. Quand vous verrez "fini !" en console et plus aucune erreur, vous aurez terminé. Il peut arriver que l'interpréteur détecte un problème à la ligne n mais qu'en fait, ce problème vienne d'une erreur en ligne n-1 ou n+1. Reportez-vous au cours sur la [[nsi:premiere:syntaxe_python|syntaxe]] et à celui sur les [[nsi:premiere:indentations|indentations]] pour vous aider. ==== Le programme ==== {{ :nsi:premiere:python:erreurs_a_corriger.py |Fichier à télécharger}} Contenu du fichier RTD = (4, 3, 3, 5) INITIAL = ( { "nom":"A", "demande":(1, 1, 1, 2), "acquis":(0, 1, 0, 1)}, { "nom":"B", "demande":(4, 3, 0, 1), "acquis":(0, 1, 0, 0)}, { "nom":"C", "demande":(2, 3, 2, 1), "acquis":(0, 0, 1, 1)}, { "nom":"D", "demande":(1, 1, 1, 1), "acquis":(1, 1, 1, 0)}, { "nom":"E", "demande":(3, 1, 2, 0), "acquis":(1, 0, 1, 0)}, { "nom":"F", "demande":(4, 1, 3, 4), "acquis":(0, 0, 0, 2)} ) nomsEtats = [item["nom"] for item in INITIAL] etatInit = "".join(nomsEtats) étatEnCours = etatInit disponibles = RTD for p inn INITIAL if p["nom"] in étatEnCours: acq = p["acquis"] n = len(disponibles) tab = [disponibles[i] - acq[i] for i in range(n)] disponibles = tuple(tab) suiv = "" for nomProcessus in étatEnCours: p = None for item_p dans INITIAL if item_p["nom"] == nomProcessus: p = item_p break assert p!= None, "Processus inconnu !" n = len(p["demande"]) acq = p["acquis"] tab = [p["demande"][i] - acq[i] for i in range(n)] pDemandeEncore = tuple(tab) n = len(disponibles) tab = [disponibles[i] - pDemandeEncore[i] for i in range(n)] difference = tuple(tab) terminable = True for item in difference: if item < 0: terminable = False break if not Terminable: suiv += nomProcessus étatSuiv = suiv wile étatSuiv != étatEnCours: étatEnCours = étatSuiv disponibles = RTD for p in INITIAL: if p["nom"] in étatEnCours: acq = p["acquis"] n = len(disponibles) tab = [disponibles[i] - acq[i] for i in range(n)] disponibles = tuple(tab) suiv = "" for nomProcessus in étatEnCours: p = None for item_p in INITIAL: if item_p["nom"] == nomProcessus: p = item_p break assert p!= None, "Processus inconnu !" n = len(p["demande"]) tab = [p["demande"][i] - p["acquis"][i] for i in range(n)] pDemandeEncore = tuple(tab) n = len(disponibles) tab = [disponibles[i] - pDemandeEncore[i] for i in range(n)] difference = tuple(tab) terminable = True for item in difference: if item < 0: terminable = False break if not terminable suiv += nomProcessus étatSuiv = suiv r = (étatEnCours == "") print("fini !")