[{"data":1,"prerenderedAt":2975},["ShallowReactive",2],{"navigation":3,"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point":585,"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point__counterpart":1816,"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point__slides":2100,"annexes-memo:\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point":2450,"annexes-slides:\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point":2675},[4,224,440],{"title":5,"path":6,"stem":7,"children":8},"SNT — Seconde","\u002Fsnt-2nde","0.snt-2nde\u002F0.index",[9,10,14,36,66,92,118,144,162,184,206],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"REVIEW pédagogique — SNT 2nde","\u002Fsnt-2nde\u002Freview","0.snt-2nde\u002FREVIEW",{"title":15,"path":16,"stem":17,"children":18},"Internet","\u002Fsnt-2nde\u002Fsa-internet","0.snt-2nde\u002Fsa-internet\u002F0.index",[19,20,24,28,32],{"title":15,"path":16,"stem":17},{"title":21,"path":22,"stem":23},"Adresses symboliques et DNS","\u002Fsnt-2nde\u002Fsa-internet\u002Fadresses-dns","0.snt-2nde\u002Fsa-internet\u002F1.adresses-dns",{"title":25,"path":26,"stem":27},"Internet et les réseaux physiques","\u002Fsnt-2nde\u002Fsa-internet\u002Freseaux-physiques","0.snt-2nde\u002Fsa-internet\u002F2.reseaux-physiques",{"title":29,"path":30,"stem":31},"Protocoles TCP\u002FIP et routage des paquets","\u002Fsnt-2nde\u002Fsa-internet\u002Ftcp-ip-routage","0.snt-2nde\u002Fsa-internet\u002F3.tcp-ip-routage",{"title":33,"path":34,"stem":35},"Réseaux pair-à-pair","\u002Fsnt-2nde\u002Fsa-internet\u002Fpair-a-pair","0.snt-2nde\u002Fsa-internet\u002F4.pair-a-pair",{"title":37,"path":38,"stem":39,"children":40},"Le Web","\u002Fsnt-2nde\u002Fsb-web","0.snt-2nde\u002Fsb-web\u002F0.index",[41,42,46,50,54,58,62],{"title":37,"path":38,"stem":39},{"title":43,"path":44,"stem":45},"Histoire du Web","\u002Fsnt-2nde\u002Fsb-web\u002Fhistoire-web","0.snt-2nde\u002Fsb-web\u002F1.histoire-web",{"title":47,"path":48,"stem":49},"URL et hypertexte","\u002Fsnt-2nde\u002Fsb-web\u002Furl-hypertexte","0.snt-2nde\u002Fsb-web\u002F2.url-hypertexte",{"title":51,"path":52,"stem":53},"HTML et CSS — le contenu et la présentation","\u002Fsnt-2nde\u002Fsb-web\u002Fhtml-css","0.snt-2nde\u002Fsb-web\u002F3.html-css",{"title":55,"path":56,"stem":57},"Client-serveur et requêtes HTTP","\u002Fsnt-2nde\u002Fsb-web\u002Fclient-serveur-http","0.snt-2nde\u002Fsb-web\u002F4.client-serveur-http",{"title":59,"path":60,"stem":61},"Moteurs de recherche","\u002Fsnt-2nde\u002Fsb-web\u002Fmoteurs-recherche","0.snt-2nde\u002Fsb-web\u002F5.moteurs-recherche",{"title":63,"path":64,"stem":65},"Sécurité du navigateur et notions juridiques","\u002Fsnt-2nde\u002Fsb-web\u002Fsecurite-droits","0.snt-2nde\u002Fsb-web\u002F6.securite-droits",{"title":67,"path":68,"stem":69,"children":70},"Les réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F0.index",[71,72,76,80,84,88],{"title":67,"path":68,"stem":69},{"title":73,"path":74,"stem":75},"Panorama des réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fpanorama-rs","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F1.panorama-rs",{"title":77,"path":78,"stem":79},"Identité numérique et authentification","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fidentite-numerique","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F2.identite-numerique",{"title":81,"path":82,"stem":83},"Le modèle économique des réseaux sociaux","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fmodele-economique","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F3.modele-economique",{"title":85,"path":86,"stem":87},"Petit monde et graphes","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fpetit-monde-graphes","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F4.petit-monde-graphes",{"title":89,"path":90,"stem":91},"La cyberviolence","\u002Fsnt-2nde\u002Fsc-reseaux-sociaux\u002Fcyberviolence","0.snt-2nde\u002Fsc-reseaux-sociaux\u002F5.cyberviolence",{"title":93,"path":94,"stem":95,"children":96},"Les données structurées et leur traitement","\u002Fsnt-2nde\u002Fsd-donnees-structurees","0.snt-2nde\u002Fsd-donnees-structurees\u002F0.index",[97,98,102,106,110,114],{"title":93,"path":94,"stem":95},{"title":99,"path":100,"stem":101},"Données et formats","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fdonnees-formats","0.snt-2nde\u002Fsd-donnees-structurees\u002F1.donnees-formats",{"title":103,"path":104,"stem":105},"Données structurées","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fdonnees-structurees","0.snt-2nde\u002Fsd-donnees-structurees\u002F2.donnees-structurees",{"title":107,"path":108,"stem":109},"Métadonnées","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fmetadonnees","0.snt-2nde\u002Fsd-donnees-structurees\u002F3.metadonnees",{"title":111,"path":112,"stem":113},"Traitement de tables","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Ftraitement-tables","0.snt-2nde\u002Fsd-donnees-structurees\u002F4.traitement-tables",{"title":115,"path":116,"stem":117},"Le cloud","\u002Fsnt-2nde\u002Fsd-donnees-structurees\u002Fcloud","0.snt-2nde\u002Fsd-donnees-structurees\u002F5.cloud",{"title":119,"path":120,"stem":121,"children":122},"Localisation, cartographie et mobilité","\u002Fsnt-2nde\u002Fse-localisation-cartographie","0.snt-2nde\u002Fse-localisation-cartographie\u002F0.index",[123,124,128,132,136,140],{"title":119,"path":120,"stem":121},{"title":125,"path":126,"stem":127},"GPS et Galileo — se situer grâce aux satellites","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fgps-galileo","0.snt-2nde\u002Fse-localisation-cartographie\u002F1.gps-galileo",{"title":129,"path":130,"stem":131},"Décoder une trame NMEA","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Ftrame-nmea","0.snt-2nde\u002Fse-localisation-cartographie\u002F2.trame-nmea",{"title":133,"path":134,"stem":135},"Cartes numériques — GeoPortail et OpenStreetMap","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fcartes-numeriques","0.snt-2nde\u002Fse-localisation-cartographie\u002F3.cartes-numeriques",{"title":137,"path":138,"stem":139},"Itinéraires et graphes","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fitineraires-graphes","0.snt-2nde\u002Fse-localisation-cartographie\u002F4.itineraires-graphes",{"title":141,"path":142,"stem":143},"Confidentialité de la position","\u002Fsnt-2nde\u002Fse-localisation-cartographie\u002Fconfidentialite-position","0.snt-2nde\u002Fse-localisation-cartographie\u002F5.confidentialite-position",{"title":145,"path":146,"stem":147,"children":148},"Informatique embarquée et objets connectés","\u002Fsnt-2nde\u002Fsf-info-embarquee","0.snt-2nde\u002Fsf-info-embarquee\u002F0.index",[149,150,154,158],{"title":145,"path":146,"stem":147},{"title":151,"path":152,"stem":153},"Systèmes informatiques embarqués","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fsystemes-embarques","0.snt-2nde\u002Fsf-info-embarquee\u002F1.systemes-embarques",{"title":155,"path":156,"stem":157},"Capteurs et actionneurs","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fcapteurs-actionneurs","0.snt-2nde\u002Fsf-info-embarquee\u002F2.capteurs-actionneurs",{"title":159,"path":160,"stem":161},"IHM et objets connectés","\u002Fsnt-2nde\u002Fsf-info-embarquee\u002Fihm-objet-connecte","0.snt-2nde\u002Fsf-info-embarquee\u002F3.ihm-objet-connecte",{"title":163,"path":164,"stem":165,"children":166},"Photographie numérique","\u002Fsnt-2nde\u002Fsg-photo-numerique","0.snt-2nde\u002Fsg-photo-numerique\u002F0.index",[167,168,172,176,180],{"title":163,"path":164,"stem":165},{"title":169,"path":170,"stem":171},"Photosites, pixels et résolution","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Fpixels-resolution","0.snt-2nde\u002Fsg-photo-numerique\u002F1.pixels-resolution",{"title":173,"path":174,"stem":175},"Les algorithmes de l'appareil photo","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Falgorithmes-photo","0.snt-2nde\u002Fsg-photo-numerique\u002F2.algorithmes-photo",{"title":177,"path":178,"stem":179},"Les métadonnées EXIF","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Fmetadonnees-exif","0.snt-2nde\u002Fsg-photo-numerique\u002F3.metadonnees-exif",{"title":181,"path":182,"stem":183},"Traiter une image en Python","\u002Fsnt-2nde\u002Fsg-photo-numerique\u002Ftraitement-rgb","0.snt-2nde\u002Fsg-photo-numerique\u002F4.traitement-rgb",{"title":185,"path":186,"stem":187,"children":188},"Notions transversales de programmation","\u002Fsnt-2nde\u002Fsh-prog-notions","0.snt-2nde\u002Fsh-prog-notions\u002F0.index",[189,190,194,198,202],{"title":185,"path":186,"stem":187},{"title":191,"path":192,"stem":193},"Séquences d'instructions et variables","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fsequences-affectations","0.snt-2nde\u002Fsh-prog-notions\u002F1.sequences-affectations",{"title":195,"path":196,"stem":197},"Instructions conditionnelles","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fconditionnelles","0.snt-2nde\u002Fsh-prog-notions\u002F2.conditionnelles",{"title":199,"path":200,"stem":201},"Boucles bornées et non bornées","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Fboucles","0.snt-2nde\u002Fsh-prog-notions\u002F3.boucles",{"title":203,"path":204,"stem":205},"Définitions et appels de fonctions","\u002Fsnt-2nde\u002Fsh-prog-notions\u002Ffonctions","0.snt-2nde\u002Fsh-prog-notions\u002F4.fonctions",{"title":207,"path":208,"stem":209,"children":210},"Démo des widgets MDC","\u002Fsnt-2nde\u002Fzz-demo-widgets","0.snt-2nde\u002Fzz-demo-widgets\u002F0.index",[211,212,216,220],{"title":207,"path":208,"stem":209},{"title":213,"path":214,"stem":215},"Démo statique — callouts, code, BO, illustration","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Fstatique","0.snt-2nde\u002Fzz-demo-widgets\u002F1.statique",{"title":217,"path":218,"stem":219},"Démo interactive — self-eval et python-snippet","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Finteractif","0.snt-2nde\u002Fzz-demo-widgets\u002F2.interactif",{"title":221,"path":222,"stem":223},"Démo · 14 widgets de manipulation NSI","\u002Fsnt-2nde\u002Fzz-demo-widgets\u002Fwidgets-manipulation","0.snt-2nde\u002Fzz-demo-widgets\u002F3.widgets-manipulation",{"title":225,"path":226,"stem":227,"children":228},"NSI — Première","\u002Fnsi-1ere","1.nsi-1ere\u002F0.index",[229,230,234,256,282,304,328,354,380,410],{"title":225,"path":226,"stem":227},{"title":231,"path":232,"stem":233},"Relecture pédagogique — 8 chapitres NSI 1ère (PA → PH)","\u002Fnsi-1ere\u002Freview","1.nsi-1ere\u002FREVIEW",{"title":235,"path":236,"stem":237,"children":238},"Histoire de l'informatique","\u002Fnsi-1ere\u002Fpa-histoire-info","1.nsi-1ere\u002Fpa-histoire-info\u002F0.index",[239,240,244,248,252],{"title":235,"path":236,"stem":237},{"title":241,"path":242,"stem":243},"De la préantiquité aux machines à calculer","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fpreantiquite-aux-machines","1.nsi-1ere\u002Fpa-histoire-info\u002F1.preantiquite-aux-machines",{"title":245,"path":246,"stem":247},"La machine universelle (1930-1950)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fmachine-universelle","1.nsi-1ere\u002Fpa-histoire-info\u002F2.machine-universelle",{"title":249,"path":250,"stem":251},"Les ordinateurs modernes (1947-1990)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Fordinateurs-modernes","1.nsi-1ere\u002Fpa-histoire-info\u002F3.ordinateurs-modernes",{"title":253,"path":254,"stem":255},"Réseaux, Web et IA (1969 à aujourd'hui)","\u002Fnsi-1ere\u002Fpa-histoire-info\u002Freseaux-et-web","1.nsi-1ere\u002Fpa-histoire-info\u002F4.reseaux-et-web",{"title":257,"path":258,"stem":259,"children":260},"Représentation des données — types et valeurs","\u002Fnsi-1ere\u002Fpb-types-valeurs","1.nsi-1ere\u002Fpb-types-valeurs\u002F0.index",[261,262,266,270,274,278],{"title":257,"path":258,"stem":259},{"title":263,"path":264,"stem":265},"Bases de numération et entiers positifs","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fbases-entiers-positifs","1.nsi-1ere\u002Fpb-types-valeurs\u002F1.bases-entiers-positifs",{"title":267,"path":268,"stem":269},"Entiers relatifs et complément à deux","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fentiers-relatifs","1.nsi-1ere\u002Fpb-types-valeurs\u002F2.entiers-relatifs",{"title":271,"path":272,"stem":273},"Nombres flottants et virgule flottante","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fflottants","1.nsi-1ere\u002Fpb-types-valeurs\u002F3.flottants",{"title":275,"path":276,"stem":277},"Textes et encodages — ASCII, ISO-8859-1, Unicode","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Ftextes-encodages","1.nsi-1ere\u002Fpb-types-valeurs\u002F4.textes-encodages",{"title":279,"path":280,"stem":281},"Valeurs booléennes et opérateurs logiques","\u002Fnsi-1ere\u002Fpb-types-valeurs\u002Fbooleens","1.nsi-1ere\u002Fpb-types-valeurs\u002F5.booleens",{"title":283,"path":284,"stem":285,"children":286},"Représentation des données : types construits","\u002Fnsi-1ere\u002Fpc-types-construits","1.nsi-1ere\u002Fpc-types-construits\u002F0.index",[287,288,292,296,300],{"title":283,"path":284,"stem":285},{"title":289,"path":290,"stem":291},"Tableaux et listes","\u002Fnsi-1ere\u002Fpc-types-construits\u002Ftableaux-listes","1.nsi-1ere\u002Fpc-types-construits\u002F1.tableaux-listes",{"title":293,"path":294,"stem":295},"Listes en compréhension","\u002Fnsi-1ere\u002Fpc-types-construits\u002Fcomprehension","1.nsi-1ere\u002Fpc-types-construits\u002F2.comprehension",{"title":297,"path":298,"stem":299},"Tuples et p-uplets nommés","\u002Fnsi-1ere\u002Fpc-types-construits\u002Ftuples","1.nsi-1ere\u002Fpc-types-construits\u002F3.tuples",{"title":301,"path":302,"stem":303},"Dictionnaires","\u002Fnsi-1ere\u002Fpc-types-construits\u002Fdictionnaires","1.nsi-1ere\u002Fpc-types-construits\u002F4.dictionnaires",{"title":305,"path":306,"stem":307,"children":308},"Traitement de données en tables","\u002Fnsi-1ere\u002Fpd-tables-donnees","1.nsi-1ere\u002Fpd-tables-donnees\u002F0.index",[309,310,314,318,322],{"title":305,"path":306,"stem":307},{"title":311,"path":312,"stem":313},"Tables et CSV","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftables-csv","1.nsi-1ere\u002Fpd-tables-donnees\u002F1.tables-csv",{"title":315,"path":316,"stem":317},"Recherche et filtrage","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Frecherche","1.nsi-1ere\u002Fpd-tables-donnees\u002F2.recherche",{"title":319,"path":320,"stem":321},"Trier une table","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ftri","1.nsi-1ere\u002Fpd-tables-donnees\u002F3.tri",{"title":323,"path":324,"stem":325,"children":326},"Fusion et indexation","\u002Fnsi-1ere\u002Fpd-tables-donnees\u002Ffusion-indexation","1.nsi-1ere\u002Fpd-tables-donnees\u002F4.fusion-indexation",[327],{"title":323,"path":324,"stem":325},{"title":329,"path":330,"stem":331,"children":332},"IHM sur le Web","\u002Fnsi-1ere\u002Fpe-ihm-web","1.nsi-1ere\u002Fpe-ihm-web\u002F0.index",[333,334,338,342,346,350],{"title":329,"path":330,"stem":331},{"title":335,"path":336,"stem":337},"HTML et CSS — rappel de structure","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fhtml-css-bases","1.nsi-1ere\u002Fpe-ihm-web\u002F1.html-css-bases",{"title":339,"path":340,"stem":341},"Formulaires HTML","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fformulaires","1.nsi-1ere\u002Fpe-ihm-web\u002F2.formulaires",{"title":343,"path":344,"stem":345},"Événements JavaScript","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fevenements-js","1.nsi-1ere\u002Fpe-ihm-web\u002F3.evenements-js",{"title":347,"path":348,"stem":349},"Manipulation du DOM","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fdom-interaction","1.nsi-1ere\u002Fpe-ihm-web\u002F4.dom-interaction",{"title":351,"path":352,"stem":353},"Client, serveur et HTTP","\u002Fnsi-1ere\u002Fpe-ihm-web\u002Fclient-serveur-http","1.nsi-1ere\u002Fpe-ihm-web\u002F5.client-serveur-http",{"title":355,"path":356,"stem":357,"children":358},"Architectures matérielles et systèmes d'exploitation","\u002Fnsi-1ere\u002Fpf-archi-os","1.nsi-1ere\u002Fpf-archi-os\u002F0.index",[359,360,364,368,372,376],{"title":355,"path":356,"stem":357},{"title":361,"path":362,"stem":363},"Le modèle de von Neumann","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fvon-neumann","1.nsi-1ere\u002Fpf-archi-os\u002F1.von-neumann",{"title":365,"path":366,"stem":367},"Périphériques et interface homme-machine","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fperipheriques-ihm","1.nsi-1ere\u002Fpf-archi-os\u002F2.peripheriques-ihm",{"title":369,"path":370,"stem":371},"Les systèmes d'exploitation","\u002Fnsi-1ere\u002Fpf-archi-os\u002Fsystemes-exploitation","1.nsi-1ere\u002Fpf-archi-os\u002F3.systemes-exploitation",{"title":373,"path":374,"stem":375},"Linux et le shell","\u002Fnsi-1ere\u002Fpf-archi-os\u002Flinux-shell","1.nsi-1ere\u002Fpf-archi-os\u002F4.linux-shell",{"title":377,"path":378,"stem":379},"Réseaux et protocoles","\u002Fnsi-1ere\u002Fpf-archi-os\u002Freseaux","1.nsi-1ere\u002Fpf-archi-os\u002F5.reseaux",{"title":381,"path":382,"stem":383,"children":384},"Langages et programmation","\u002Fnsi-1ere\u002Fpg-langages-prog","1.nsi-1ere\u002Fpg-langages-prog\u002F0.index",[385,386,390,394,398,402,406],{"title":381,"path":382,"stem":383},{"title":387,"path":388,"stem":389},"Diversité et unité des langages de programmation","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fdiversite-langages","1.nsi-1ere\u002Fpg-langages-prog\u002F1.diversite-langages",{"title":391,"path":392,"stem":393},"Constructions élémentaires","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fconstructions-elementaires","1.nsi-1ere\u002Fpg-langages-prog\u002F2.constructions-elementaires",{"title":395,"path":396,"stem":397},"Fonctions","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Ffonctions","1.nsi-1ere\u002Fpg-langages-prog\u002F3.fonctions",{"title":399,"path":400,"stem":401},"Spécification d'une fonction","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fspecification","1.nsi-1ere\u002Fpg-langages-prog\u002F4.specification",{"title":403,"path":404,"stem":405},"Mise au point des programmes","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point","1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point",{"title":407,"path":408,"stem":409},"Utilisation de bibliothèques","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fbibliotheques","1.nsi-1ere\u002Fpg-langages-prog\u002F6.bibliotheques",{"title":411,"path":412,"stem":413,"children":414},"Algorithmique","\u002Fnsi-1ere\u002Fph-algorithmique","1.nsi-1ere\u002Fph-algorithmique\u002F0.index",[415,416,420,424,428,432,436],{"title":411,"path":412,"stem":413},{"title":417,"path":418,"stem":419},"Parcours séquentiel d'un tableau","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fparcours-sequentiel","1.nsi-1ere\u002Fph-algorithmique\u002F1.parcours-sequentiel",{"title":421,"path":422,"stem":423},"Bases de la complexité","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fcomplexite-bases","1.nsi-1ere\u002Fph-algorithmique\u002F2.complexite-bases",{"title":425,"path":426,"stem":427},"Tris par sélection et par insertion","\u002Fnsi-1ere\u002Fph-algorithmique\u002Ftris","1.nsi-1ere\u002Fph-algorithmique\u002F3.tris",{"title":429,"path":430,"stem":431},"Recherche dichotomique","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fdichotomie","1.nsi-1ere\u002Fph-algorithmique\u002F4.dichotomie",{"title":433,"path":434,"stem":435},"Algorithmes gloutons","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fgloutons","1.nsi-1ere\u002Fph-algorithmique\u002F5.gloutons",{"title":437,"path":438,"stem":439},"Les k plus proches voisins (k-NN)","\u002Fnsi-1ere\u002Fph-algorithmique\u002Fknn","1.nsi-1ere\u002Fph-algorithmique\u002F6.knn",{"title":441,"path":442,"stem":443,"children":444},"NSI — Terminale","\u002Fnsi-tale","2.nsi-tale\u002F0.index",[445,446,450,476,498,536,560],{"title":441,"path":442,"stem":443},{"title":447,"path":448,"stem":449},"Review pédagogique — chapitres NSI Terminale (TA, TB, TC, TD, TE)","\u002Fnsi-tale\u002Freview","2.nsi-tale\u002FREVIEW",{"title":451,"path":452,"stem":453,"children":454},"Structures de données","\u002Fnsi-tale\u002Fta-structures-donnees","2.nsi-tale\u002Fta-structures-donnees\u002F0.index",[455,456,460,464,468,472],{"title":451,"path":452,"stem":453},{"title":457,"path":458,"stem":459},"Objet, classe, interface","\u002Fnsi-tale\u002Fta-structures-donnees\u002Finterface-implementation","2.nsi-tale\u002Fta-structures-donnees\u002F1.interface-implementation",{"title":461,"path":462,"stem":463},"Implémenter une structure — l'exemple de la file FIFO","\u002Fnsi-tale\u002Fta-structures-donnees\u002Fimplementer-une-structure","2.nsi-tale\u002Fta-structures-donnees\u002F2.implementer-une-structure",{"title":465,"path":466,"stem":467},"Listes, piles, files, dictionnaires","\u002Fnsi-tale\u002Fta-structures-donnees\u002Flistes-piles-files-dict","2.nsi-tale\u002Fta-structures-donnees\u002F3.listes-piles-files-dict",{"title":469,"path":470,"stem":471},"Arbres binaires","\u002Fnsi-tale\u002Fta-structures-donnees\u002Farbres-binaires","2.nsi-tale\u002Fta-structures-donnees\u002F4.arbres-binaires",{"title":473,"path":474,"stem":475},"Graphes","\u002Fnsi-tale\u002Fta-structures-donnees\u002Fgraphes","2.nsi-tale\u002Fta-structures-donnees\u002F5.graphes",{"title":477,"path":478,"stem":479,"children":480},"Bases de données","\u002Fnsi-tale\u002Ftb-bases-de-donnees","2.nsi-tale\u002Ftb-bases-de-donnees\u002F0.index",[481,482,486,490,494],{"title":477,"path":478,"stem":479},{"title":483,"path":484,"stem":485},"Le modèle relationnel","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fmodele-relationnel","2.nsi-tale\u002Ftb-bases-de-donnees\u002F1.modele-relationnel",{"title":487,"path":488,"stem":489},"Bases de données relationnelles et anomalies de schéma","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fbase-relationnelle","2.nsi-tale\u002Ftb-bases-de-donnees\u002F2.base-relationnelle",{"title":491,"path":492,"stem":493},"Le langage SQL","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fsql","2.nsi-tale\u002Ftb-bases-de-donnees\u002F3.sql",{"title":495,"path":496,"stem":497},"Les systèmes de gestion de bases de données","\u002Fnsi-tale\u002Ftb-bases-de-donnees\u002Fsgbd","2.nsi-tale\u002Ftb-bases-de-donnees\u002F4.sgbd",{"title":499,"path":500,"stem":501,"children":502},"Architectures matérielles, systèmes d'exploitation et réseaux","\u002Fnsi-tale\u002Ftc-archi-os-reseaux","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F0.index",[503,504,508,512,516,520,524,528,532],{"title":499,"path":500,"stem":501},{"title":505,"path":506,"stem":507},"Le système sur puce (SoC)","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fsysteme-sur-puce","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F1.systeme-sur-puce",{"title":509,"path":510,"stem":511},"Processus et ordonnancement par l'OS","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fprocessus-os","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F2.processus-os",{"title":513,"path":514,"stem":515},"L'interblocage (deadlock)","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Finterblocage","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F3.interblocage",{"title":517,"path":518,"stem":519},"Principes du routage","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Froutage-principes","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F4.routage-principes",{"title":521,"path":522,"stem":523},"Protocoles de routage RIP et OSPF","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fprotocoles-rip-ospf","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F5.protocoles-rip-ospf",{"title":525,"path":526,"stem":527},"Chiffrement symétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fchiffrement-symetrique","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F6.chiffrement-symetrique",{"title":529,"path":530,"stem":531},"Chiffrement asymétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fchiffrement-asymetrique","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F7.chiffrement-asymetrique",{"title":533,"path":534,"stem":535},"HTTPS — l'échange de clé symétrique","\u002Fnsi-tale\u002Ftc-archi-os-reseaux\u002Fhttps-tls","2.nsi-tale\u002Ftc-archi-os-reseaux\u002F8.https-tls",{"title":381,"path":537,"stem":538,"children":539},"\u002Fnsi-tale\u002Ftd-langages-prog","2.nsi-tale\u002Ftd-langages-prog\u002F0.index",[540,541,544,548,552,556],{"title":381,"path":537,"stem":538},{"title":403,"path":542,"stem":543},"\u002Fnsi-tale\u002Ftd-langages-prog\u002Fmise-au-point","2.nsi-tale\u002Ftd-langages-prog\u002F1.mise-au-point",{"title":545,"path":546,"stem":547},"Modularité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fmodularite","2.nsi-tale\u002Ftd-langages-prog\u002F2.modularite",{"title":549,"path":550,"stem":551},"Récursivité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Frecursivite","2.nsi-tale\u002Ftd-langages-prog\u002F3.recursivite",{"title":553,"path":554,"stem":555},"Paradigmes de programmation","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fparadigmes","2.nsi-tale\u002Ftd-langages-prog\u002F4.paradigmes",{"title":557,"path":558,"stem":559},"Programme comme donnée — calculabilité et indécidabilité","\u002Fnsi-tale\u002Ftd-langages-prog\u002Fprogramme-comme-donnee","2.nsi-tale\u002Ftd-langages-prog\u002F5.programme-comme-donnee",{"title":411,"path":561,"stem":562,"children":563},"\u002Fnsi-tale\u002Fte-algorithmique","2.nsi-tale\u002Fte-algorithmique\u002F0.index",[564,565,569,573,577,581],{"title":411,"path":561,"stem":562},{"title":566,"path":567,"stem":568},"Algorithmes sur les arbres binaires","\u002Fnsi-tale\u002Fte-algorithmique\u002Farbres-binaires-algos","2.nsi-tale\u002Fte-algorithmique\u002F1.arbres-binaires-algos",{"title":570,"path":571,"stem":572},"Parcours de graphes — DFS, BFS, cycles, chemins","\u002Fnsi-tale\u002Fte-algorithmique\u002Fgraphes-parcours","2.nsi-tale\u002Fte-algorithmique\u002F2.graphes-parcours",{"title":574,"path":575,"stem":576},"Diviser pour régner","\u002Fnsi-tale\u002Fte-algorithmique\u002Fdiviser-pour-regner","2.nsi-tale\u002Fte-algorithmique\u002F3.diviser-pour-regner",{"title":578,"path":579,"stem":580},"Programmation dynamique","\u002Fnsi-tale\u002Fte-algorithmique\u002Fprogrammation-dynamique","2.nsi-tale\u002Fte-algorithmique\u002F4.programmation-dynamique",{"title":582,"path":583,"stem":584},"Recherche textuelle — l'algorithme de Boyer-Moore","\u002Fnsi-tale\u002Fte-algorithmique\u002Frecherche-textuelle","2.nsi-tale\u002Fte-algorithmique\u002F5.recherche-textuelle",{"id":586,"title":403,"bo":587,"body":589,"description":1802,"eval":1803,"extension":1804,"labo":1803,"meta":1805,"navigation":915,"path":404,"quizzes":1806,"readingTime":720,"seo":1814,"stem":405,"tp":1803,"__hash__":1815},"cours\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point.md",[588],"PG03",{"type":590,"value":591,"toc":1785},"minimark",[592,597,613,624,628,695,702,707,752,755,763,769,773,820,822,828,831,835,941,948,971,975,994,1000,1003,1032,1047,1060,1066,1069,1183,1185,1191,1203,1207,1225,1228,1304,1323,1330,1333,1456,1463,1626,1629,1635,1639,1642,1686,1693,1718,1722,1759,1763,1781],[593,594,596],"h2",{"id":595},"introduction","Introduction",[598,599,600,601,605,606,609,610],"p",{},"Un programme marche ",[602,603,604],"strong",{},"rarement du premier coup",". Le travail de\n",[602,607,608],{},"mise au point"," — détecter les erreurs, comprendre leur origine, les\ncorriger, vérifier que le programme fait bien ce qu'il doit faire — occupe\nsouvent plus de temps que l'écriture du code lui-même. Ce n'est pas un\néchec : c'est le cœur du métier. ",[611,612],"bo-ref",{"code":588},[598,614,615,616,619,620,623],{},"Un bon programmeur ressemble moins à un magicien qu'à un ",[602,617,618],{},"détective"," : il\ncollecte des indices (messages d'erreur, valeurs intermédiaires), formule\ndes hypothèses, les confronte aux faits, et resserre son enquête jusqu'au\ncoupable. L'enjeu de ce cours est de transformer la mise au point en\n",[602,621,622],{},"démarche méthodique"," plutôt qu'en errance hasardeuse devant un message\nd'erreur incompréhensible.",[593,625,627],{"id":626},"les-trois-grands-types-derreurs","Les trois grands types d'erreurs",[629,630,631,647],"table",{},[632,633,634],"thead",{},[635,636,637,641,644],"tr",{},[638,639,640],"th",{},"Type",[638,642,643],{},"Symptôme",[638,645,646],{},"Exemple",[648,649,650,669,682],"tbody",{},[635,651,652,658,661],{},[653,654,655],"td",{},[602,656,657],{},"Syntaxe",[653,659,660],{},"Python refuse même de lancer le programme.",[653,662,663,664,668],{},"Oubli des ",[665,666,667],"code",{},":",", parenthèse non fermée.",[635,670,671,676,679],{},[653,672,673],{},[602,674,675],{},"Exécution",[653,677,678],{},"Le programme démarre puis plante avec une exception.",[653,680,681],{},"Division par zéro, indice hors liste.",[635,683,684,689,692],{},[653,685,686],{},[602,687,688],{},"Logique",[653,690,691],{},"Le programme tourne, mais le résultat est faux.",[653,693,694],{},"Le calcul de moyenne renvoie un mauvais nombre.",[598,696,697,698,701],{},"Les erreurs ",[602,699,700],{},"logiques"," sont les plus dangereuses : sans test, elles\npeuvent passer inaperçues.",[703,704,706],"h3",{"id":705},"erreur-de-syntaxe","Erreur de syntaxe",[708,709,714],"pre",{"className":710,"code":711,"language":712,"meta":713,"style":713},"language-python shiki shiki-themes github-light github-light github-dark","if x > 0\n    print(\"positif\")\n","python","",[665,715,716,736],{"__ignoreMap":713},[717,718,721,725,729,732],"span",{"class":719,"line":720},"line",1,[717,722,724],{"class":723},"s8jYJ","if",[717,726,728],{"class":727},"sxrX7"," x ",[717,730,731],{"class":723},">",[717,733,735],{"class":734},"sBjJW"," 0\n",[717,737,739,742,745,749],{"class":719,"line":738},2,[717,740,741],{"class":734},"    print",[717,743,744],{"class":727},"(",[717,746,748],{"class":747},"sIIMD","\"positif\"",[717,750,751],{"class":727},")\n",[598,753,754],{},"Sortie :",[708,756,761],{"className":757,"code":759,"language":760},[758],"language-text","File \"...\", line 1\n    if x > 0\n           ^\nSyntaxError: expected ':'\n","text",[665,762,759],{"__ignoreMap":713},[598,764,765,766,768],{},"Le ",[665,767,667],{}," manquant suffit à empêcher l'exécution.",[703,770,772],{"id":771},"erreur-dexécution-exception","Erreur d'exécution (exception)",[708,774,776],{"className":710,"code":775,"language":712,"meta":713,"style":713},"notes = [12, 15, 14]\nprint(notes[10])\n",[665,777,778,806],{"__ignoreMap":713},[717,779,780,783,786,789,792,795,798,800,803],{"class":719,"line":720},[717,781,782],{"class":727},"notes ",[717,784,785],{"class":723},"=",[717,787,788],{"class":727}," [",[717,790,791],{"class":734},"12",[717,793,794],{"class":727},", ",[717,796,797],{"class":734},"15",[717,799,794],{"class":727},[717,801,802],{"class":734},"14",[717,804,805],{"class":727},"]\n",[717,807,808,811,814,817],{"class":719,"line":738},[717,809,810],{"class":734},"print",[717,812,813],{"class":727},"(notes[",[717,815,816],{"class":734},"10",[717,818,819],{"class":727},"])\n",[598,821,754],{},[708,823,826],{"className":824,"code":825,"language":760},[758],"IndexError: list index out of range\n",[665,827,825],{"__ignoreMap":713},[598,829,830],{},"Python a tenté l'opération et a abandonné en chemin.",[703,832,834],{"id":833},"erreur-de-logique","Erreur de logique",[708,836,838],{"className":710,"code":837,"language":712,"meta":713,"style":713},"def moyenne(notes):\n    total = 0\n    for n in notes:\n        total + n           # oubli du = → ne modifie pas total\n    return total \u002F len(notes)\n\nprint(moyenne([10, 12, 14]))   # 0.0 — pas l'erreur attendue !\n",[665,839,840,852,861,876,892,910,917],{"__ignoreMap":713},[717,841,842,845,849],{"class":719,"line":720},[717,843,844],{"class":723},"def",[717,846,848],{"class":847},"snPdu"," moyenne",[717,850,851],{"class":727},"(notes):\n",[717,853,854,857,859],{"class":719,"line":738},[717,855,856],{"class":727},"    total ",[717,858,785],{"class":723},[717,860,735],{"class":734},[717,862,864,867,870,873],{"class":719,"line":863},3,[717,865,866],{"class":723},"    for",[717,868,869],{"class":727}," n ",[717,871,872],{"class":723},"in",[717,874,875],{"class":727}," notes:\n",[717,877,879,882,885,888],{"class":719,"line":878},4,[717,880,881],{"class":727},"        total ",[717,883,884],{"class":723},"+",[717,886,887],{"class":727}," n           ",[717,889,891],{"class":890},"sCsY4","# oubli du = → ne modifie pas total\n",[717,893,895,898,901,904,907],{"class":719,"line":894},5,[717,896,897],{"class":723},"    return",[717,899,900],{"class":727}," total ",[717,902,903],{"class":723},"\u002F",[717,905,906],{"class":734}," len",[717,908,909],{"class":727},"(notes)\n",[717,911,913],{"class":719,"line":912},6,[717,914,916],{"emptyLinePlaceholder":915},true,"\n",[717,918,920,922,925,927,929,931,933,935,938],{"class":719,"line":919},7,[717,921,810],{"class":734},[717,923,924],{"class":727},"(moyenne([",[717,926,816],{"class":734},[717,928,794],{"class":727},[717,930,791],{"class":734},[717,932,794],{"class":727},[717,934,802],{"class":734},[717,936,937],{"class":727},"]))   ",[717,939,940],{"class":890},"# 0.0 — pas l'erreur attendue !\n",[598,942,943,944,947],{},"Le programme tourne sans crier, mais répond ",[602,945,946],{},"n'importe quoi",".",[949,950,953,959],"self-eval-qcm",{"correct":951,"slug":952},"2","mise-au-point-c1",[954,955,956],"template",{"v-slot:question":713},[598,957,958],{},"Quel est le type d'erreur le plus difficile à détecter ?",[954,960,961],{"v-slot:choices":713},[962,963,964,967,969],"ul",{},[965,966,657],"li",{},[965,968,675],{},[965,970,688],{},[593,972,974],{"id":973},"lire-un-message-derreur","Lire un message d'erreur",[598,976,977,978,981,982,986,987,990,991,947],{},"Quand Python plante, il affiche une ",[602,979,980],{},"trace"," (",[983,984,985],"em",{},"traceback",") qui se lit\n",[602,988,989],{},"de haut en bas pour suivre l'enchaînement"," et ",[602,992,993],{},"de bas en haut pour\ntrouver la cause immédiate",[708,995,998],{"className":996,"code":997,"language":760},[758],"Traceback (most recent call last):\n  File \"calculs.py\", line 12, in \u003Cmodule>\n    print(moyenne([]))\n  File \"calculs.py\", line 8, in moyenne\n    return total \u002F len(notes)\nZeroDivisionError: division by zero\n",[665,999,997],{"__ignoreMap":713},[598,1001,1002],{},"Trois informations clés :",[1004,1005,1006,1015,1023],"ol",{},[965,1007,1008,1011,1012,947],{},[602,1009,1010],{},"Le type d'erreur"," : ",[665,1013,1014],{},"ZeroDivisionError",[965,1016,1017,1011,1020,947],{},[602,1018,1019],{},"Le message",[665,1021,1022],{},"division by zero",[965,1024,1025,1028,1029,947],{},[602,1026,1027],{},"L'endroit"," : ligne 8 dans la fonction ",[665,1030,1031],{},"moyenne",[598,1033,1034,1035,1038,1039,1042,1043,1046],{},"Ici, l'enchaînement révèle qu'on appelle ",[665,1036,1037],{},"moyenne([])"," — liste vide,\n",[665,1040,1041],{},"len([]) == 0",", division par zéro. La cause est ",[602,1044,1045],{},"dans l'appel",", pas dans\nla fonction.",[1048,1049,1050],"tip",{},[598,1051,1052,1053,1056,1057,947],{},"Toujours commencer par ",[602,1054,1055],{},"lire le message d'erreur"," avant de modifier le\ncode. La grande majorité des erreurs sont résolues en 30 secondes par une\nlecture attentive du ",[665,1058,1059],{},"Traceback",[593,1061,765,1063,1065],{"id":1062},"le-print-de-débogage",[665,1064,810],{}," de débogage",[598,1067,1068],{},"L'outil de débogage le plus universel : afficher l'état des variables à des\npoints clés du programme.",[708,1070,1072],{"className":710,"code":1071,"language":712,"meta":713,"style":713},"def moyenne(notes):\n    total = 0\n    for n in notes:\n        print(\"avant :\", total, \"ajout :\", n)   # debug\n        total += n\n        print(\"après :\", total)                  # debug\n    return total \u002F len(notes)\n\nprint(moyenne([10, 12, 14]))\n",[665,1073,1074,1082,1090,1100,1122,1132,1146,1158,1163],{"__ignoreMap":713},[717,1075,1076,1078,1080],{"class":719,"line":720},[717,1077,844],{"class":723},[717,1079,848],{"class":847},[717,1081,851],{"class":727},[717,1083,1084,1086,1088],{"class":719,"line":738},[717,1085,856],{"class":727},[717,1087,785],{"class":723},[717,1089,735],{"class":734},[717,1091,1092,1094,1096,1098],{"class":719,"line":863},[717,1093,866],{"class":723},[717,1095,869],{"class":727},[717,1097,872],{"class":723},[717,1099,875],{"class":727},[717,1101,1102,1105,1107,1110,1113,1116,1119],{"class":719,"line":878},[717,1103,1104],{"class":734},"        print",[717,1106,744],{"class":727},[717,1108,1109],{"class":747},"\"avant :\"",[717,1111,1112],{"class":727},", total, ",[717,1114,1115],{"class":747},"\"ajout :\"",[717,1117,1118],{"class":727},", n)   ",[717,1120,1121],{"class":890},"# debug\n",[717,1123,1124,1126,1129],{"class":719,"line":894},[717,1125,881],{"class":727},[717,1127,1128],{"class":723},"+=",[717,1130,1131],{"class":727}," n\n",[717,1133,1134,1136,1138,1141,1144],{"class":719,"line":912},[717,1135,1104],{"class":734},[717,1137,744],{"class":727},[717,1139,1140],{"class":747},"\"après :\"",[717,1142,1143],{"class":727},", total)                  ",[717,1145,1121],{"class":890},[717,1147,1148,1150,1152,1154,1156],{"class":719,"line":919},[717,1149,897],{"class":723},[717,1151,900],{"class":727},[717,1153,903],{"class":723},[717,1155,906],{"class":734},[717,1157,909],{"class":727},[717,1159,1161],{"class":719,"line":1160},8,[717,1162,916],{"emptyLinePlaceholder":915},[717,1164,1166,1168,1170,1172,1174,1176,1178,1180],{"class":719,"line":1165},9,[717,1167,810],{"class":734},[717,1169,924],{"class":727},[717,1171,816],{"class":734},[717,1173,794],{"class":727},[717,1175,791],{"class":734},[717,1177,794],{"class":727},[717,1179,802],{"class":734},[717,1181,1182],{"class":727},"]))\n",[598,1184,754],{},[708,1186,1189],{"className":1187,"code":1188,"language":760},[758],"avant : 0 ajout : 10\naprès : 10\navant : 10 ajout : 12\naprès : 22\navant : 22 ajout : 14\naprès : 36\n12.0\n",[665,1190,1188],{"__ignoreMap":713},[598,1192,1193,1194,1197,1198],{},"On voit en direct comment ",[665,1195,1196],{},"total"," évolue, et on confirme que la valeur\nfinale est cohérente. ",[602,1199,1200,1201,947],{},"Une fois le bug corrigé, on retire les ",[665,1202,810],{},[593,1204,1206],{"id":1205},"jeux-de-tests","Jeux de tests",[598,1208,1209,1210,1213,1214,1217,1218,1221,1222,947],{},"Pour qu'un programme soit ",[602,1211,1212],{},"correct",", il ne suffit pas qu'il marche sur\n",[602,1215,1216],{},"un"," exemple : il faut qu'il marche sur ",[602,1219,1220],{},"un échantillon représentatif","\nd'entrées possibles. C'est un ",[602,1223,1224],{},"jeu de tests",[598,1226,1227],{},"Quatre familles de cas à toujours envisager :",[629,1229,1230,1243],{},[632,1231,1232],{},[635,1233,1234,1237],{},[638,1235,1236],{},"Famille",[638,1238,1239,1240],{},"Exemples pour ",[665,1241,1242],{},"moyenne(notes)",[648,1244,1245,1260,1277,1287],{},[635,1246,1247,1252],{},[653,1248,1249],{},[602,1250,1251],{},"Cas normaux",[653,1253,1254,794,1257],{},[665,1255,1256],{},"[10, 12, 14]",[665,1258,1259],{},"[8, 15]",[635,1261,1262,1267],{},[653,1263,1264],{},[602,1265,1266],{},"Cas limites",[653,1268,1269,1272,1273,1276],{},[665,1270,1271],{},"[20, 20, 20]"," (toutes à 20), ",[665,1274,1275],{},"[0]"," (un seul élément)",[635,1278,1279,1284],{},[653,1280,1281],{},[602,1282,1283],{},"Cas extrêmes",[653,1285,1286],{},"liste de 100 notes, notes très proches de 0 ou 20",[635,1288,1289,1294],{},[653,1290,1291],{},[602,1292,1293],{},"Cas interdits",[653,1295,1296,1299,1300,1303],{},[665,1297,1298],{},"[]"," (vide), ",[665,1301,1302],{},"[25]"," (hors plage) → précondition",[1305,1306,1307,1317],"warning",{},[598,1308,1309,1312,1313,1316],{},[602,1310,1311],{},"Le succès d'un jeu de tests ne prouve pas la correction."," Il prouve que\nle programme ",[602,1314,1315],{},"marche sur ces cas",". Il peut très bien échouer sur le 51ᵉ\ncas qu'on n'a pas pensé à tester.",[598,1318,1319,1320,1322],{},"C'est exactement le commentaire associé à l'item ",[611,1321],{"code":588}," du\nprogramme : « le succès d'un jeu de tests ne garantit pas la correction\nd'un programme ».",[593,1324,1326,1327],{"id":1325},"tester-avec-assert","Tester avec ",[665,1328,1329],{},"assert",[598,1331,1332],{},"Le moyen le plus simple de coder un jeu de tests : enchaîner des assertions\nqui doivent toutes passer.",[708,1334,1336],{"className":710,"code":1335,"language":712,"meta":713,"style":713},"def double(n):\n    return n * 2\n\n# Jeu de tests\nassert double(0) == 0\nassert double(3) == 6\nassert double(-2) == -4\nassert double(100) == 200\n\nprint(\"Tous les tests passent.\")\n",[665,1337,1338,1348,1360,1364,1369,1387,1403,1424,1440,1444],{"__ignoreMap":713},[717,1339,1340,1342,1345],{"class":719,"line":720},[717,1341,844],{"class":723},[717,1343,1344],{"class":847}," double",[717,1346,1347],{"class":727},"(n):\n",[717,1349,1350,1352,1354,1357],{"class":719,"line":738},[717,1351,897],{"class":723},[717,1353,869],{"class":727},[717,1355,1356],{"class":723},"*",[717,1358,1359],{"class":734}," 2\n",[717,1361,1362],{"class":719,"line":863},[717,1363,916],{"emptyLinePlaceholder":915},[717,1365,1366],{"class":719,"line":878},[717,1367,1368],{"class":890},"# Jeu de tests\n",[717,1370,1371,1373,1376,1379,1382,1385],{"class":719,"line":894},[717,1372,1329],{"class":723},[717,1374,1375],{"class":727}," double(",[717,1377,1378],{"class":734},"0",[717,1380,1381],{"class":727},") ",[717,1383,1384],{"class":723},"==",[717,1386,735],{"class":734},[717,1388,1389,1391,1393,1396,1398,1400],{"class":719,"line":912},[717,1390,1329],{"class":723},[717,1392,1375],{"class":727},[717,1394,1395],{"class":734},"3",[717,1397,1381],{"class":727},[717,1399,1384],{"class":723},[717,1401,1402],{"class":734}," 6\n",[717,1404,1405,1407,1409,1412,1414,1416,1418,1421],{"class":719,"line":919},[717,1406,1329],{"class":723},[717,1408,1375],{"class":727},[717,1410,1411],{"class":723},"-",[717,1413,951],{"class":734},[717,1415,1381],{"class":727},[717,1417,1384],{"class":723},[717,1419,1420],{"class":723}," -",[717,1422,1423],{"class":734},"4\n",[717,1425,1426,1428,1430,1433,1435,1437],{"class":719,"line":1160},[717,1427,1329],{"class":723},[717,1429,1375],{"class":727},[717,1431,1432],{"class":734},"100",[717,1434,1381],{"class":727},[717,1436,1384],{"class":723},[717,1438,1439],{"class":734}," 200\n",[717,1441,1442],{"class":719,"line":1165},[717,1443,916],{"emptyLinePlaceholder":915},[717,1445,1447,1449,1451,1454],{"class":719,"line":1446},10,[717,1448,810],{"class":734},[717,1450,744],{"class":727},[717,1452,1453],{"class":747},"\"Tous les tests passent.\"",[717,1455,751],{"class":727},[598,1457,1458,1459,1462],{},"Si une assertion échoue, Python lève ",[665,1460,1461],{},"AssertionError"," à la ligne précise.\nSi toutes passent, on voit le message final.",[1464,1465,1466],"python-snippet",{},[708,1467,1469],{"className":710,"code":1468,"language":712,"meta":713,"style":713},"def maximum(a, b):\n    if a > b:\n        return a\n    return b\n\n# Jeu de tests\nassert maximum(3, 5) == 5         # b est plus grand\nassert maximum(7, 2) == 7         # a est plus grand\nassert maximum(4, 4) == 4         # cas d'égalité\nassert maximum(-1, -3) == -1      # nombres négatifs\nprint(\"Tous les tests passent.\")\n",[665,1470,1471,1481,1494,1502,1509,1513,1517,1541,1564,1587,1615],{"__ignoreMap":713},[717,1472,1473,1475,1478],{"class":719,"line":720},[717,1474,844],{"class":723},[717,1476,1477],{"class":847}," maximum",[717,1479,1480],{"class":727},"(a, b):\n",[717,1482,1483,1486,1489,1491],{"class":719,"line":738},[717,1484,1485],{"class":723},"    if",[717,1487,1488],{"class":727}," a ",[717,1490,731],{"class":723},[717,1492,1493],{"class":727}," b:\n",[717,1495,1496,1499],{"class":719,"line":863},[717,1497,1498],{"class":723},"        return",[717,1500,1501],{"class":727}," a\n",[717,1503,1504,1506],{"class":719,"line":878},[717,1505,897],{"class":723},[717,1507,1508],{"class":727}," b\n",[717,1510,1511],{"class":719,"line":894},[717,1512,916],{"emptyLinePlaceholder":915},[717,1514,1515],{"class":719,"line":912},[717,1516,1368],{"class":890},[717,1518,1519,1521,1524,1526,1528,1531,1533,1535,1538],{"class":719,"line":919},[717,1520,1329],{"class":723},[717,1522,1523],{"class":727}," maximum(",[717,1525,1395],{"class":734},[717,1527,794],{"class":727},[717,1529,1530],{"class":734},"5",[717,1532,1381],{"class":727},[717,1534,1384],{"class":723},[717,1536,1537],{"class":734}," 5",[717,1539,1540],{"class":890},"         # b est plus grand\n",[717,1542,1543,1545,1547,1550,1552,1554,1556,1558,1561],{"class":719,"line":1160},[717,1544,1329],{"class":723},[717,1546,1523],{"class":727},[717,1548,1549],{"class":734},"7",[717,1551,794],{"class":727},[717,1553,951],{"class":734},[717,1555,1381],{"class":727},[717,1557,1384],{"class":723},[717,1559,1560],{"class":734}," 7",[717,1562,1563],{"class":890},"         # a est plus grand\n",[717,1565,1566,1568,1570,1573,1575,1577,1579,1581,1584],{"class":719,"line":1165},[717,1567,1329],{"class":723},[717,1569,1523],{"class":727},[717,1571,1572],{"class":734},"4",[717,1574,794],{"class":727},[717,1576,1572],{"class":734},[717,1578,1381],{"class":727},[717,1580,1384],{"class":723},[717,1582,1583],{"class":734}," 4",[717,1585,1586],{"class":890},"         # cas d'égalité\n",[717,1588,1589,1591,1593,1595,1598,1600,1602,1604,1606,1608,1610,1612],{"class":719,"line":1446},[717,1590,1329],{"class":723},[717,1592,1523],{"class":727},[717,1594,1411],{"class":723},[717,1596,1597],{"class":734},"1",[717,1599,794],{"class":727},[717,1601,1411],{"class":723},[717,1603,1395],{"class":734},[717,1605,1381],{"class":727},[717,1607,1384],{"class":723},[717,1609,1420],{"class":723},[717,1611,1597],{"class":734},[717,1613,1614],{"class":890},"      # nombres négatifs\n",[717,1616,1618,1620,1622,1624],{"class":719,"line":1617},11,[717,1619,810],{"class":734},[717,1621,744],{"class":727},[717,1623,1453],{"class":747},[717,1625,751],{"class":727},[598,1627,1628],{},"Sortie attendue :",[708,1630,1633],{"className":1631,"code":1632,"language":760},[758],"Tous les tests passent.\n",[665,1634,1632],{"__ignoreMap":713},[593,1636,1638],{"id":1637},"démarche-méthodique","Démarche méthodique",[598,1640,1641],{},"Devant un bug, suivre la séquence :",[1004,1643,1644,1650,1656,1662,1670,1676],{},[965,1645,1646,1649],{},[602,1647,1648],{},"Reproduire"," le bug — quel appel précis le déclenche ?",[965,1651,1652,1655],{},[602,1653,1654],{},"Isoler"," : trouver l'entrée la plus simple qui plante.",[965,1657,1658,1661],{},[602,1659,1660],{},"Lire"," le message d'erreur si présent.",[965,1663,1664,1011,1667,1669],{},[602,1665,1666],{},"Tracer",[665,1668,810],{}," ou débogueur pour suivre les valeurs.",[965,1671,1672,1675],{},[602,1673,1674],{},"Formuler une hypothèse"," sur la cause.",[965,1677,1678,1681,1682,1685],{},[602,1679,1680],{},"Corriger",", puis ",[602,1683,1684],{},"relancer le jeu de tests complet"," — pas seulement\nle cas qui plantait.",[598,1687,1688,1689,1692],{},"La dernière étape est cruciale : une correction peut introduire un nouveau\nbug. C'est la ",[602,1690,1691],{},"régression",". Le jeu de tests complet protège contre cela.",[949,1694,1696,1705],{"correct":1597,"slug":1695},"mise-au-point-c2",[954,1697,1698],{"v-slot:question":713},[598,1699,1700,1701,1704],{},"Que se passe-t-il si ",[665,1702,1703],{},"assert 1 == 2"," est exécuté ?",[954,1706,1707],{"v-slot:choices":713},[962,1708,1709,1712,1715],{},[965,1710,1711],{},"Le programme continue sans rien faire",[965,1713,1714],{},"Le programme lève AssertionError",[965,1716,1717],{},"Le programme affiche False",[593,1719,1721],{"id":1720},"pièges-courants","Pièges courants",[1305,1723,1724],{},[962,1725,1726,1732,1738,1744,1750],{},[965,1727,1728,1731],{},[602,1729,1730],{},"Modifier au hasard"," : changer une ligne en espérant que ça marche\nsans comprendre est la pire stratégie.",[965,1733,1734,1737],{},[602,1735,1736],{},"Tester uniquement les cas normaux"," : un programme correct gère aussi\nles cas limites (liste vide, valeur nulle…).",[965,1739,1740,1743],{},[602,1741,1742],{},"Oublier de relancer tous les tests"," après correction — risque de\nrégression.",[965,1745,1746,1749],{},[602,1747,1748],{},"Confondre absence d'erreur et correction"," : un programme qui ne plante\npas peut tout à fait donner de mauvais résultats.",[965,1751,1752,1758],{},[602,1753,1754,1755,1757],{},"Laisser les ",[665,1756,810],{}," de debug"," dans le code final.",[593,1760,1762],{"id":1761},"pour-aller-plus-loin","Pour aller plus loin",[598,1764,1765,1766,981,1769,1772,1773,1776,1777,1780],{},"Le jeu de tests est tellement central qu'il a donné naissance à un style de\nprogrammation entier : le ",[602,1767,1768],{},"TDD",[983,1770,1771],{},"Test-Driven Development",") — on écrit les\ntests ",[602,1774,1775],{},"avant"," le code. Vous le pratiquerez avec naturel dès que la\nspécification ",[611,1778],{"code":1779},"PG04"," sera bien en place : précondition →\npostcondition → tests → code.",[1782,1783,1784],"style",{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":713,"searchDepth":738,"depth":738,"links":1786},[1787,1788,1793,1794,1796,1797,1799,1800,1801],{"id":595,"depth":738,"text":596},{"id":626,"depth":738,"text":627,"children":1789},[1790,1791,1792],{"id":705,"depth":863,"text":706},{"id":771,"depth":863,"text":772},{"id":833,"depth":863,"text":834},{"id":973,"depth":738,"text":974},{"id":1062,"depth":738,"text":1795},"Le print de débogage",{"id":1205,"depth":738,"text":1206},{"id":1325,"depth":738,"text":1798},"Tester avec assert",{"id":1637,"depth":738,"text":1638},{"id":1720,"depth":738,"text":1721},{"id":1761,"depth":738,"text":1762},"Bugs, débogage, jeux de tests et assertions — la démarche méthodique pour rendre un programme correct.",null,"md",{},[1807,1811],{"slug":952,"kind":1808,"question":958,"choices":1809,"correct":951,"multi":1810,"explanation":713},"qcm",[657,675,688],false,{"slug":1695,"kind":1808,"question":1812,"choices":1813,"correct":1597,"multi":1810,"explanation":713},"Que se passe-t-il si assert 1 == 2 est exécuté ?",[1711,1714,1717],{"title":403,"description":1802},"x_i-DvKgQizY7BKW1ertN3iUeOySw1aRkvaKBsahirE",{"id":1817,"title":1818,"bo":1819,"body":1820,"description":2093,"eval":1803,"extension":1804,"labo":1803,"meta":2094,"navigation":1810,"path":2095,"quizzes":2096,"readingTime":720,"seo":2097,"stem":2098,"tp":1803,"__hash__":2099},"coursMemo\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point.memo.md","Mise au point des programmes — l'essentiel",[588],{"type":590,"value":1821,"toc":2085},[1822,1826,1840,1844,1897,1901,1944,1948,1975,1977,1994,1998,2082],[593,1823,1825],{"id":1824},"en-une-phrase","En une phrase",[598,1827,1828,1829,1832,1833,1835,1836,1839],{},"Mettre au point un programme, c'est repérer les bugs avec ",[602,1830,1831],{},"méthode"," —\nlire le message d'erreur, tracer avec ",[665,1834,810],{},", et construire un ",[602,1837,1838],{},"jeu de\ntests"," qui couvre les cas normaux, limites et extrêmes.",[593,1841,1843],{"id":1842},"à-mémoriser","À mémoriser",[962,1845,1846,1869,1875,1881,1885],{},[965,1847,1848,1851,1852],{},[602,1849,1850],{},"Trois types d'erreurs"," :\n",[962,1853,1854,1859,1864],{},[965,1855,1856,1858],{},[602,1857,657],{}," : refus de lancer.",[965,1860,1861,1863],{},[602,1862,675],{}," : exception en cours.",[965,1865,1866,1868],{},[602,1867,688],{}," : résultat faux, programme silencieux.",[965,1870,1871,1872,1874],{},"Lire un ",[665,1873,1059],{}," : de bas en haut pour la cause, de haut en bas pour\nl'enchaînement.",[965,1876,1877,1880],{},[602,1878,1879],{},"Jeu de tests"," : cas normaux + limites + extrêmes + interdits.",[965,1882,1883],{},[602,1884,1311],{},[965,1886,1887,1890,1891,1894,1895,947],{},[665,1888,1889],{},"assert condition"," : test passe si ",[665,1892,1893],{},"condition"," est vraie, sinon\n",[665,1896,1461],{},[593,1898,1900],{"id":1899},"à-savoir-reconnaître","À savoir reconnaître",[629,1902,1903,1912],{},[632,1904,1905],{},[635,1906,1907,1909],{},[638,1908,643],{},[638,1910,1911],{},"Type d'erreur",[648,1913,1914,1924,1937],{},[635,1915,1916,1922],{},[653,1917,1918,1921],{},[665,1919,1920],{},"SyntaxError"," au lancement",[653,1923,657],{},[635,1925,1926,1935],{},[653,1927,1928,1929,794,1932,1934],{},"Trace ",[665,1930,1931],{},"IndexError",[665,1933,1014],{},"…",[653,1936,675],{},[635,1938,1939,1942],{},[653,1940,1941],{},"Programme tourne mais résultat faux",[653,1943,688],{},[593,1945,1947],{"id":1946},"démarche","Démarche",[1004,1949,1950,1953,1956,1959,1965,1968],{},[965,1951,1952],{},"Reproduire le bug.",[965,1954,1955],{},"Isoler le cas minimal.",[965,1957,1958],{},"Lire le message d'erreur.",[965,1960,1961,1962,1964],{},"Tracer (",[665,1963,810],{}," ou débogueur).",[965,1966,1967],{},"Hypothèse.",[965,1969,1970,1971,1974],{},"Correction + relance ",[602,1972,1973],{},"complète"," des tests.",[593,1976,1721],{"id":1720},[962,1978,1979,1982,1985,1988],{},[965,1980,1981],{},"Modifier au hasard sans hypothèse.",[965,1983,1984],{},"Ne tester que les cas normaux.",[965,1986,1987],{},"Confondre « ne plante pas » et « est correct ».",[965,1989,1990,1991,1993],{},"Laisser des ",[665,1992,810],{}," de debug en version finale.",[593,1995,1997],{"id":1996},"syntaxe-python","Syntaxe Python",[708,1999,2001],{"className":710,"code":2000,"language":712,"meta":713,"style":713},"def double(n):\n    return n * 2\n\nassert double(0) == 0\nassert double(3) == 6\nassert double(-2) == -4\nprint(\"Tests OK\")\n",[665,2002,2003,2011,2021,2025,2039,2053,2071],{"__ignoreMap":713},[717,2004,2005,2007,2009],{"class":719,"line":720},[717,2006,844],{"class":723},[717,2008,1344],{"class":847},[717,2010,1347],{"class":727},[717,2012,2013,2015,2017,2019],{"class":719,"line":738},[717,2014,897],{"class":723},[717,2016,869],{"class":727},[717,2018,1356],{"class":723},[717,2020,1359],{"class":734},[717,2022,2023],{"class":719,"line":863},[717,2024,916],{"emptyLinePlaceholder":915},[717,2026,2027,2029,2031,2033,2035,2037],{"class":719,"line":878},[717,2028,1329],{"class":723},[717,2030,1375],{"class":727},[717,2032,1378],{"class":734},[717,2034,1381],{"class":727},[717,2036,1384],{"class":723},[717,2038,735],{"class":734},[717,2040,2041,2043,2045,2047,2049,2051],{"class":719,"line":894},[717,2042,1329],{"class":723},[717,2044,1375],{"class":727},[717,2046,1395],{"class":734},[717,2048,1381],{"class":727},[717,2050,1384],{"class":723},[717,2052,1402],{"class":734},[717,2054,2055,2057,2059,2061,2063,2065,2067,2069],{"class":719,"line":912},[717,2056,1329],{"class":723},[717,2058,1375],{"class":727},[717,2060,1411],{"class":723},[717,2062,951],{"class":734},[717,2064,1381],{"class":727},[717,2066,1384],{"class":723},[717,2068,1420],{"class":723},[717,2070,1423],{"class":734},[717,2072,2073,2075,2077,2080],{"class":719,"line":919},[717,2074,810],{"class":734},[717,2076,744],{"class":727},[717,2078,2079],{"class":747},"\"Tests OK\"",[717,2081,751],{"class":727},[1782,2083,2084],{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":713,"searchDepth":738,"depth":738,"links":2086},[2087,2088,2089,2090,2091,2092],{"id":1824,"depth":738,"text":1825},{"id":1842,"depth":738,"text":1843},{"id":1899,"depth":738,"text":1900},{"id":1946,"depth":738,"text":1947},{"id":1720,"depth":738,"text":1721},{"id":1996,"depth":738,"text":1997},"Mémo de révision sur les types d'erreurs, le débogage et les jeux de tests.",{},"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point.memo",[],{"title":1818,"description":2093},"1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point.memo","Flo4dGANgrYocDjSHH06kceaVxFAFp_0ekWL0Uyk1mw",{"id":2101,"title":2102,"body":2103,"description":2444,"extension":1804,"meta":2445,"navigation":1810,"path":2446,"seo":2447,"stem":2448,"__hash__":2449},"coursSlides\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point.slides.md","Mise au point des programmes — diapositives",{"type":590,"value":2104,"toc":2442},[2105,2110,2113,2116,2119,2136,2139,2141,2145,2150,2156,2158,2162,2231,2234,2236,2240,2293,2295,2299,2381,2387,2389,2393,2399,2401,2403,2424,2426,2430,2439],[2106,2107,2109],"h1",{"id":2108},"mise-au-point","Mise au point",[598,2111,2112],{},"Du code qui plante au code qui marche — avec méthode.",[2114,2115],"hr",{},[2106,2117,1850],{"id":2118},"trois-types-derreurs",[962,2120,2121,2126,2131],{},[965,2122,2123,2125],{},[602,2124,657],{}," — Python refuse de lancer.",[965,2127,2128,2130],{},[602,2129,675],{}," — exception en cours d'exécution.",[965,2132,2133,2135],{},[602,2134,688],{}," — tourne, mais résultat faux.",[598,2137,2138],{},"La 3ᵉ est la plus dangereuse.",[2114,2140],{},[2106,2142,2144],{"id":2143},"lire-un-traceback","Lire un Traceback",[708,2146,2148],{"className":2147,"code":997,"language":760},[758],[665,2149,997],{"__ignoreMap":713},[598,2151,2152,2153],{},"Type, message, ligne. ",[602,2154,2155],{},"Toujours commencer par là.",[2114,2157],{},[2106,2159,765,2160,1065],{"id":1062},[665,2161,810],{},[708,2163,2165],{"className":710,"code":2164,"language":712,"meta":713,"style":713},"def moyenne(notes):\n    total = 0\n    for n in notes:\n        print(\"avant:\", total, \"n:\", n)   # debug\n        total += n\n    return total \u002F len(notes)\n",[665,2166,2167,2175,2183,2193,2211,2219],{"__ignoreMap":713},[717,2168,2169,2171,2173],{"class":719,"line":720},[717,2170,844],{"class":723},[717,2172,848],{"class":847},[717,2174,851],{"class":727},[717,2176,2177,2179,2181],{"class":719,"line":738},[717,2178,856],{"class":727},[717,2180,785],{"class":723},[717,2182,735],{"class":734},[717,2184,2185,2187,2189,2191],{"class":719,"line":863},[717,2186,866],{"class":723},[717,2188,869],{"class":727},[717,2190,872],{"class":723},[717,2192,875],{"class":727},[717,2194,2195,2197,2199,2202,2204,2207,2209],{"class":719,"line":878},[717,2196,1104],{"class":734},[717,2198,744],{"class":727},[717,2200,2201],{"class":747},"\"avant:\"",[717,2203,1112],{"class":727},[717,2205,2206],{"class":747},"\"n:\"",[717,2208,1118],{"class":727},[717,2210,1121],{"class":890},[717,2212,2213,2215,2217],{"class":719,"line":894},[717,2214,881],{"class":727},[717,2216,1128],{"class":723},[717,2218,1131],{"class":727},[717,2220,2221,2223,2225,2227,2229],{"class":719,"line":912},[717,2222,897],{"class":723},[717,2224,900],{"class":727},[717,2226,903],{"class":723},[717,2228,906],{"class":734},[717,2230,909],{"class":727},[598,2232,2233],{},"L'outil universel. À retirer ensuite.",[2114,2235],{},[2106,2237,2239],{"id":2238},"jeu-de-tests-quatre-familles","Jeu de tests : quatre familles",[629,2241,2242,2253],{},[632,2243,2244],{},[635,2245,2246,2248],{},[638,2247,1236],{},[638,2249,2250,2251],{},"Exemple pour ",[665,2252,1031],{},[648,2254,2255,2264,2274,2284],{},[635,2256,2257,2260],{},[653,2258,2259],{},"Normal",[653,2261,2262],{},[665,2263,1256],{},[635,2265,2266,2269],{},[653,2267,2268],{},"Limite",[653,2270,2271],{},[665,2272,2273],{},"[20]",[635,2275,2276,2279],{},[653,2277,2278],{},"Extrême",[653,2280,2281],{},[665,2282,2283],{},"[0, 0, 0, …, 0]",[635,2285,2286,2289],{},[653,2287,2288],{},"Interdit",[653,2290,2291],{},[665,2292,1298],{},[2114,2294],{},[2106,2296,1326,2297],{"id":1325},[665,2298,1329],{},[708,2300,2301],{"className":710,"code":2000,"language":712,"meta":713,"style":713},[665,2302,2303,2311,2321,2325,2339,2353,2371],{"__ignoreMap":713},[717,2304,2305,2307,2309],{"class":719,"line":720},[717,2306,844],{"class":723},[717,2308,1344],{"class":847},[717,2310,1347],{"class":727},[717,2312,2313,2315,2317,2319],{"class":719,"line":738},[717,2314,897],{"class":723},[717,2316,869],{"class":727},[717,2318,1356],{"class":723},[717,2320,1359],{"class":734},[717,2322,2323],{"class":719,"line":863},[717,2324,916],{"emptyLinePlaceholder":915},[717,2326,2327,2329,2331,2333,2335,2337],{"class":719,"line":878},[717,2328,1329],{"class":723},[717,2330,1375],{"class":727},[717,2332,1378],{"class":734},[717,2334,1381],{"class":727},[717,2336,1384],{"class":723},[717,2338,735],{"class":734},[717,2340,2341,2343,2345,2347,2349,2351],{"class":719,"line":894},[717,2342,1329],{"class":723},[717,2344,1375],{"class":727},[717,2346,1395],{"class":734},[717,2348,1381],{"class":727},[717,2350,1384],{"class":723},[717,2352,1402],{"class":734},[717,2354,2355,2357,2359,2361,2363,2365,2367,2369],{"class":719,"line":912},[717,2356,1329],{"class":723},[717,2358,1375],{"class":727},[717,2360,1411],{"class":723},[717,2362,951],{"class":734},[717,2364,1381],{"class":727},[717,2366,1384],{"class":723},[717,2368,1420],{"class":723},[717,2370,1423],{"class":734},[717,2372,2373,2375,2377,2379],{"class":719,"line":919},[717,2374,810],{"class":734},[717,2376,744],{"class":727},[717,2378,2079],{"class":747},[717,2380,751],{"class":727},[598,2382,2383,2384,2386],{},"Silencieux si tout passe, lève ",[665,2385,1461],{}," sinon.",[2114,2388],{},[2106,2390,2392],{"id":2391},"le-succès-des-tests-ne-prouve-pas-la-correction","Le succès des tests ne prouve pas la correction",[598,2394,2395,2396,947],{},"Tester ce que vous avez pensé. Ne pas tester ce que vous n'avez pas pensé.\nToujours ",[602,2397,2398],{},"chercher un cas où ça pourrait casser",[2114,2400],{},[2106,2402,1947],{"id":1946},[1004,2404,2405,2407,2409,2412,2414,2417],{},[965,2406,1648],{},[965,2408,1654],{},[965,2410,2411],{},"Lire l'erreur",[965,2413,1666],{},[965,2415,2416],{},"Hypothèse",[965,2418,2419,2420,2423],{},"Corriger + relancer ",[602,2421,2422],{},"tous"," les tests",[2114,2425],{},[2106,2427,2429],{"id":2428},"à-retenir","À retenir",[598,2431,2432,2433,2435,2436,2438],{},"Un bon programmeur n'écrit pas du code sans bug — il a une ",[602,2434,1831],{},"\npour les chasser, et un ",[602,2437,1224],{}," qui défend contre les régressions.",[1782,2440,2441],{},"html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":713,"searchDepth":738,"depth":738,"links":2443},[],"Deck pour la séance sur les bugs, le débogage et les tests.",{},"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fmise-au-point.slides",{"title":2102,"description":2444},"1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point.slides","1jDGICBhI2K7h1-S7zlCcVbgr-A1C9yvpV-PqyY8l7g",{"id":1817,"title":1818,"bo":2451,"body":2452,"description":2093,"eval":1803,"extension":1804,"labo":1803,"meta":2672,"navigation":1810,"path":2095,"quizzes":2673,"readingTime":720,"seo":2674,"stem":2098,"tp":1803,"__hash__":2099},[588],{"type":590,"value":2453,"toc":2664},[2454,2456,2464,2466,2506,2508,2544,2546,2564,2566,2578,2580,2662],[593,2455,1825],{"id":1824},[598,2457,1828,2458,1832,2460,1835,2462,1839],{},[602,2459,1831],{},[665,2461,810],{},[602,2463,1838],{},[593,2465,1843],{"id":1842},[962,2467,2468,2486,2490,2494,2498],{},[965,2469,2470,1851,2472],{},[602,2471,1850],{},[962,2473,2474,2478,2482],{},[965,2475,2476,1858],{},[602,2477,657],{},[965,2479,2480,1863],{},[602,2481,675],{},[965,2483,2484,1868],{},[602,2485,688],{},[965,2487,1871,2488,1874],{},[665,2489,1059],{},[965,2491,2492,1880],{},[602,2493,1879],{},[965,2495,2496],{},[602,2497,1311],{},[965,2499,2500,1890,2502,1894,2504,947],{},[665,2501,1889],{},[665,2503,1893],{},[665,2505,1461],{},[593,2507,1900],{"id":1899},[629,2509,2510,2518],{},[632,2511,2512],{},[635,2513,2514,2516],{},[638,2515,643],{},[638,2517,1911],{},[648,2519,2520,2528,2538],{},[635,2521,2522,2526],{},[653,2523,2524,1921],{},[665,2525,1920],{},[653,2527,657],{},[635,2529,2530,2536],{},[653,2531,1928,2532,794,2534,1934],{},[665,2533,1931],{},[665,2535,1014],{},[653,2537,675],{},[635,2539,2540,2542],{},[653,2541,1941],{},[653,2543,688],{},[593,2545,1947],{"id":1946},[1004,2547,2548,2550,2552,2554,2558,2560],{},[965,2549,1952],{},[965,2551,1955],{},[965,2553,1958],{},[965,2555,1961,2556,1964],{},[665,2557,810],{},[965,2559,1967],{},[965,2561,1970,2562,1974],{},[602,2563,1973],{},[593,2565,1721],{"id":1720},[962,2567,2568,2570,2572,2574],{},[965,2569,1981],{},[965,2571,1984],{},[965,2573,1987],{},[965,2575,1990,2576,1993],{},[665,2577,810],{},[593,2579,1997],{"id":1996},[708,2581,2582],{"className":710,"code":2000,"language":712,"meta":713,"style":713},[665,2583,2584,2592,2602,2606,2620,2634,2652],{"__ignoreMap":713},[717,2585,2586,2588,2590],{"class":719,"line":720},[717,2587,844],{"class":723},[717,2589,1344],{"class":847},[717,2591,1347],{"class":727},[717,2593,2594,2596,2598,2600],{"class":719,"line":738},[717,2595,897],{"class":723},[717,2597,869],{"class":727},[717,2599,1356],{"class":723},[717,2601,1359],{"class":734},[717,2603,2604],{"class":719,"line":863},[717,2605,916],{"emptyLinePlaceholder":915},[717,2607,2608,2610,2612,2614,2616,2618],{"class":719,"line":878},[717,2609,1329],{"class":723},[717,2611,1375],{"class":727},[717,2613,1378],{"class":734},[717,2615,1381],{"class":727},[717,2617,1384],{"class":723},[717,2619,735],{"class":734},[717,2621,2622,2624,2626,2628,2630,2632],{"class":719,"line":894},[717,2623,1329],{"class":723},[717,2625,1375],{"class":727},[717,2627,1395],{"class":734},[717,2629,1381],{"class":727},[717,2631,1384],{"class":723},[717,2633,1402],{"class":734},[717,2635,2636,2638,2640,2642,2644,2646,2648,2650],{"class":719,"line":912},[717,2637,1329],{"class":723},[717,2639,1375],{"class":727},[717,2641,1411],{"class":723},[717,2643,951],{"class":734},[717,2645,1381],{"class":727},[717,2647,1384],{"class":723},[717,2649,1420],{"class":723},[717,2651,1423],{"class":734},[717,2653,2654,2656,2658,2660],{"class":719,"line":919},[717,2655,810],{"class":734},[717,2657,744],{"class":727},[717,2659,2079],{"class":747},[717,2661,751],{"class":727},[1782,2663,2084],{},{"title":713,"searchDepth":738,"depth":738,"links":2665},[2666,2667,2668,2669,2670,2671],{"id":1824,"depth":738,"text":1825},{"id":1842,"depth":738,"text":1843},{"id":1899,"depth":738,"text":1900},{"id":1946,"depth":738,"text":1947},{"id":1720,"depth":738,"text":1721},{"id":1996,"depth":738,"text":1997},{},[],{"title":1818,"description":2093},{"id":2101,"title":2102,"body":2676,"description":2444,"extension":1804,"meta":2973,"navigation":1810,"path":2446,"seo":2974,"stem":2448,"__hash__":2449},{"type":590,"value":2677,"toc":2971},[2678,2680,2682,2684,2686,2700,2702,2704,2706,2711,2715,2717,2721,2787,2789,2791,2793,2839,2841,2845,2927,2931,2933,2935,2939,2941,2943,2959,2961,2963,2969],[2106,2679,2109],{"id":2108},[598,2681,2112],{},[2114,2683],{},[2106,2685,1850],{"id":2118},[962,2687,2688,2692,2696],{},[965,2689,2690,2125],{},[602,2691,657],{},[965,2693,2694,2130],{},[602,2695,675],{},[965,2697,2698,2135],{},[602,2699,688],{},[598,2701,2138],{},[2114,2703],{},[2106,2705,2144],{"id":2143},[708,2707,2709],{"className":2708,"code":997,"language":760},[758],[665,2710,997],{"__ignoreMap":713},[598,2712,2152,2713],{},[602,2714,2155],{},[2114,2716],{},[2106,2718,765,2719,1065],{"id":1062},[665,2720,810],{},[708,2722,2723],{"className":710,"code":2164,"language":712,"meta":713,"style":713},[665,2724,2725,2733,2741,2751,2767,2775],{"__ignoreMap":713},[717,2726,2727,2729,2731],{"class":719,"line":720},[717,2728,844],{"class":723},[717,2730,848],{"class":847},[717,2732,851],{"class":727},[717,2734,2735,2737,2739],{"class":719,"line":738},[717,2736,856],{"class":727},[717,2738,785],{"class":723},[717,2740,735],{"class":734},[717,2742,2743,2745,2747,2749],{"class":719,"line":863},[717,2744,866],{"class":723},[717,2746,869],{"class":727},[717,2748,872],{"class":723},[717,2750,875],{"class":727},[717,2752,2753,2755,2757,2759,2761,2763,2765],{"class":719,"line":878},[717,2754,1104],{"class":734},[717,2756,744],{"class":727},[717,2758,2201],{"class":747},[717,2760,1112],{"class":727},[717,2762,2206],{"class":747},[717,2764,1118],{"class":727},[717,2766,1121],{"class":890},[717,2768,2769,2771,2773],{"class":719,"line":894},[717,2770,881],{"class":727},[717,2772,1128],{"class":723},[717,2774,1131],{"class":727},[717,2776,2777,2779,2781,2783,2785],{"class":719,"line":912},[717,2778,897],{"class":723},[717,2780,900],{"class":727},[717,2782,903],{"class":723},[717,2784,906],{"class":734},[717,2786,909],{"class":727},[598,2788,2233],{},[2114,2790],{},[2106,2792,2239],{"id":2238},[629,2794,2795,2805],{},[632,2796,2797],{},[635,2798,2799,2801],{},[638,2800,1236],{},[638,2802,2250,2803],{},[665,2804,1031],{},[648,2806,2807,2815,2823,2831],{},[635,2808,2809,2811],{},[653,2810,2259],{},[653,2812,2813],{},[665,2814,1256],{},[635,2816,2817,2819],{},[653,2818,2268],{},[653,2820,2821],{},[665,2822,2273],{},[635,2824,2825,2827],{},[653,2826,2278],{},[653,2828,2829],{},[665,2830,2283],{},[635,2832,2833,2835],{},[653,2834,2288],{},[653,2836,2837],{},[665,2838,1298],{},[2114,2840],{},[2106,2842,1326,2843],{"id":1325},[665,2844,1329],{},[708,2846,2847],{"className":710,"code":2000,"language":712,"meta":713,"style":713},[665,2848,2849,2857,2867,2871,2885,2899,2917],{"__ignoreMap":713},[717,2850,2851,2853,2855],{"class":719,"line":720},[717,2852,844],{"class":723},[717,2854,1344],{"class":847},[717,2856,1347],{"class":727},[717,2858,2859,2861,2863,2865],{"class":719,"line":738},[717,2860,897],{"class":723},[717,2862,869],{"class":727},[717,2864,1356],{"class":723},[717,2866,1359],{"class":734},[717,2868,2869],{"class":719,"line":863},[717,2870,916],{"emptyLinePlaceholder":915},[717,2872,2873,2875,2877,2879,2881,2883],{"class":719,"line":878},[717,2874,1329],{"class":723},[717,2876,1375],{"class":727},[717,2878,1378],{"class":734},[717,2880,1381],{"class":727},[717,2882,1384],{"class":723},[717,2884,735],{"class":734},[717,2886,2887,2889,2891,2893,2895,2897],{"class":719,"line":894},[717,2888,1329],{"class":723},[717,2890,1375],{"class":727},[717,2892,1395],{"class":734},[717,2894,1381],{"class":727},[717,2896,1384],{"class":723},[717,2898,1402],{"class":734},[717,2900,2901,2903,2905,2907,2909,2911,2913,2915],{"class":719,"line":912},[717,2902,1329],{"class":723},[717,2904,1375],{"class":727},[717,2906,1411],{"class":723},[717,2908,951],{"class":734},[717,2910,1381],{"class":727},[717,2912,1384],{"class":723},[717,2914,1420],{"class":723},[717,2916,1423],{"class":734},[717,2918,2919,2921,2923,2925],{"class":719,"line":919},[717,2920,810],{"class":734},[717,2922,744],{"class":727},[717,2924,2079],{"class":747},[717,2926,751],{"class":727},[598,2928,2383,2929,2386],{},[665,2930,1461],{},[2114,2932],{},[2106,2934,2392],{"id":2391},[598,2936,2395,2937,947],{},[602,2938,2398],{},[2114,2940],{},[2106,2942,1947],{"id":1946},[1004,2944,2945,2947,2949,2951,2953,2955],{},[965,2946,1648],{},[965,2948,1654],{},[965,2950,2411],{},[965,2952,1666],{},[965,2954,2416],{},[965,2956,2419,2957,2423],{},[602,2958,2422],{},[2114,2960],{},[2106,2962,2429],{"id":2428},[598,2964,2432,2965,2435,2967,2438],{},[602,2966,1831],{},[602,2968,1224],{},[1782,2970,2441],{},{"title":713,"searchDepth":738,"depth":738,"links":2972},[],{},{"title":2102,"description":2444},1788035582401]