[{"data":1,"prerenderedAt":10896},["ShallowReactive",2],{"navigation":3,"chapter-cours-nsi-1ere\u002Fpg-langages-prog":585,"chapter-index-nsi-1ere\u002Fpg-langages-prog":8385,"chapter-memo-nsi-1ere\u002Fpg-langages-prog":8514},[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",[586,1499,2961,4419,5352,6457],{"id":587,"title":387,"bo":588,"body":590,"description":1486,"eval":1487,"extension":1488,"labo":1487,"meta":1489,"navigation":1083,"path":388,"quizzes":1490,"readingTime":863,"seo":1497,"stem":389,"tp":1487,"__hash__":1498},"cours\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F1.diversite-langages.md",[589],"PG02",{"type":591,"value":592,"toc":1477},"minimark",[593,598,618,625,629,632,700,703,718,722,729,763,846,1133,1136,1162,1166,1173,1199,1222,1273,1276,1284,1304,1308,1315,1406,1413,1434,1438,1459,1463,1473],[594,595,597],"h2",{"id":596},"introduction","Introduction",[599,600,601,602,606,607,610,611,614,615],"p",{},"Il existe aujourd'hui ",[603,604,605],"strong",{},"des centaines de langages de programmation"," : Python,\nC, Java, JavaScript, OCaml, Rust, Haskell, SQL, HTML… Cette profusion peut\nsembler désordonnée. Elle reflète en réalité l'idée qu'",[603,608,609],{},"aucun langage n'est\nuniversellement adapté"," : on choisit un langage selon l'usage, la\nperformance, la communauté ou les contraintes du matériel. Pourtant, sous\ncette diversité, presque tous les langages s'appuient sur les ",[603,612,613],{},"mêmes\nconstructions de base",". ",[616,617],"bo-ref",{"code":589},[599,619,620,621,624],{},"Apprendre la programmation, ce n'est donc pas apprendre ",[603,622,623],{},"un"," langage —\nc'est apprendre à reconnaître ces constructions universelles, et à les\nretrouver dans n'importe quel langage que vous croiserez plus tard.",[594,626,628],{"id":627},"pourquoi-tant-de-langages","Pourquoi tant de langages ?",[599,630,631],{},"Un langage de programmation est conçu autour d'un compromis entre plusieurs\nexigences difficiles à satisfaire toutes en même temps :",[633,634,635,648],"table",{},[636,637,638],"thead",{},[639,640,641,645],"tr",{},[642,643,644],"th",{},"Exigence",[642,646,647],{},"Exemple de langage qui l'optimise",[649,650,651,660,668,676,684,692],"tbody",{},[639,652,653,657],{},[654,655,656],"td",{},"Performance brute, contrôle du matériel",[654,658,659],{},"C, C++, Rust",[639,661,662,665],{},[654,663,664],{},"Lisibilité, productivité, apprentissage",[654,666,667],{},"Python, Ruby",[639,669,670,673],{},[654,671,672],{},"Sûreté à l'exécution, garanties mathématiques",[654,674,675],{},"OCaml, Haskell, Rust",[639,677,678,681],{},[654,679,680],{},"Portabilité sur le Web",[654,682,683],{},"JavaScript, TypeScript",[639,685,686,689],{},[654,687,688],{},"Manipulation de données structurées",[654,690,691],{},"SQL, R",[639,693,694,697],{},[654,695,696],{},"Rapidité d'exécution sur serveur ou mobile",[654,698,699],{},"Java, Kotlin, Go",[599,701,702],{},"Aucun langage ne maximise tout. Python est lisible mais lent à l'exécution.\nC est rapide mais offre peu de garde-fous. SQL exprime des requêtes sur des\nbases de données mais ne sert pas à écrire un jeu vidéo.",[704,705,706],"note",{},[599,707,708,709,712,713,717],{},"On parle aussi de ",[603,710,711],{},"langages dédiés"," (DSL, ",[714,715,716],"em",{},"domain-specific languages",") :\ndes langages spécialisés pour un domaine, comme SQL pour les bases de\ndonnées ou HTML pour la structure d'une page Web. Ce ne sont pas des\nlangages de programmation généralistes au sens strict, mais ils suivent\nla même logique d'expressivité.",[594,719,721],{"id":720},"les-grands-paradigmes","Les grands paradigmes",[599,723,724,725,728],{},"Un ",[603,726,727],{},"paradigme"," est une grande famille de manière de concevoir un programme.\nTrois paradigmes dominent l'enseignement en NSI :",[730,731,732,743,753],"ul",{},[733,734,735,738,739,742],"li",{},[603,736,737],{},"Impératif"," : on décrit une ",[603,740,741],{},"suite d'instructions"," qui modifient l'état\nd'une mémoire. C'est le style de Python que vous pratiquez le plus souvent,\net celui du langage C.",[733,744,745,748,749,752],{},[603,746,747],{},"Fonctionnel"," : on décrit le programme comme une ",[603,750,751],{},"composition de\nfonctions"," mathématiques sans état mutable. Style natif d'OCaml, Haskell,\nlargement présent en JavaScript moderne.",[733,754,755,758,759,762],{},[603,756,757],{},"Objet"," : on regroupe données et opérations dans des ",[603,760,761],{},"objets"," qui\ns'envoient des messages. Style de Java, C++, et possible en Python.",[599,764,765,766,769,770,815,816,845],{},"Python est un langage ",[603,767,768],{},"multi-paradigme"," : il accepte les trois styles, parfois\nmélangés. Voici le même programme — calculer la somme des carrés des entiers de\n",[771,772,775,797],"span",{"className":773},[774],"katex",[771,776,779],{"className":777},[778],"katex-mathml",[780,781,783],"math",{"xmlns":782},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[784,785,786,793],"semantics",{},[787,788,789],"mrow",{},[790,791,792],"mn",{},"1",[794,795,792],"annotation",{"encoding":796},"application\u002Fx-tex",[771,798,802],{"className":799,"ariaHidden":801},[800],"katex-html","true",[771,803,806,811],{"className":804},[805],"base",[771,807],{"className":808,"style":810},[809],"strut","height:0.6444em;",[771,812,792],{"className":813},[814],"mord"," à ",[771,817,819,833],{"className":818},[774],[771,820,822],{"className":821},[778],[780,823,824],{"xmlns":782},[784,825,826,831],{},[787,827,828],{},[790,829,830],{},"5",[794,832,830],{"encoding":796},[771,834,836],{"className":835,"ariaHidden":801},[800],[771,837,839,842],{"className":838},[805],[771,840],{"className":841,"style":810},[809],[771,843,830],{"className":844},[814]," — écrit dans les trois styles.",[847,848,849,940,1009],"code-group",{},[850,851,857],"pre",{"className":852,"code":853,"filename":854,"language":855,"meta":856,"style":856},"language-python shiki shiki-themes github-light github-light github-dark","total = 0\nfor i in range(1, 6):\n    total = total + i * i\nprint(total)  # 55\n","impératif.py","python","",[858,859,860,876,905,927],"code",{"__ignoreMap":856},[771,861,864,868,872],{"class":862,"line":863},"line",1,[771,865,867],{"class":866},"sxrX7","total ",[771,869,871],{"class":870},"s8jYJ","=",[771,873,875],{"class":874},"sBjJW"," 0\n",[771,877,879,882,885,888,891,894,896,899,902],{"class":862,"line":878},2,[771,880,881],{"class":870},"for",[771,883,884],{"class":866}," i ",[771,886,887],{"class":870},"in",[771,889,890],{"class":874}," range",[771,892,893],{"class":866},"(",[771,895,792],{"class":874},[771,897,898],{"class":866},", ",[771,900,901],{"class":874},"6",[771,903,904],{"class":866},"):\n",[771,906,908,911,913,916,919,921,924],{"class":862,"line":907},3,[771,909,910],{"class":866},"    total ",[771,912,871],{"class":870},[771,914,915],{"class":866}," total ",[771,917,918],{"class":870},"+",[771,920,884],{"class":866},[771,922,923],{"class":870},"*",[771,925,926],{"class":866}," i\n",[771,928,930,933,936],{"class":862,"line":929},4,[771,931,932],{"class":874},"print",[771,934,935],{"class":866},"(total)  ",[771,937,939],{"class":938},"sCsY4","# 55\n",[850,941,944],{"className":852,"code":942,"filename":943,"language":855,"meta":856,"style":856},"nombres = range(1, 6)\ncarres = map(lambda n: n * n, nombres)\ntotal = sum(carres)\nprint(total)  # 55\n","fonctionnel.py",[858,945,946,966,989,1001],{"__ignoreMap":856},[771,947,948,951,953,955,957,959,961,963],{"class":862,"line":863},[771,949,950],{"class":866},"nombres ",[771,952,871],{"class":870},[771,954,890],{"class":874},[771,956,893],{"class":866},[771,958,792],{"class":874},[771,960,898],{"class":866},[771,962,901],{"class":874},[771,964,965],{"class":866},")\n",[771,967,968,971,973,976,978,981,984,986],{"class":862,"line":878},[771,969,970],{"class":866},"carres ",[771,972,871],{"class":870},[771,974,975],{"class":874}," map",[771,977,893],{"class":866},[771,979,980],{"class":870},"lambda",[771,982,983],{"class":866}," n: n ",[771,985,923],{"class":870},[771,987,988],{"class":866}," n, nombres)\n",[771,990,991,993,995,998],{"class":862,"line":907},[771,992,867],{"class":866},[771,994,871],{"class":870},[771,996,997],{"class":874}," sum",[771,999,1000],{"class":866},"(carres)\n",[771,1002,1003,1005,1007],{"class":862,"line":929},[771,1004,932],{"class":874},[771,1006,935],{"class":866},[771,1008,939],{"class":938},[850,1010,1013],{"className":852,"code":1011,"filename":1012,"language":855,"meta":856,"style":856},"class Compteur:\n    def __init__(self):\n        self.total = 0\n    def ajouter_carre(self, n):\n        self.total += n * n\n\nc = Compteur()\nfor i in range(1, 6):\n    c.ajouter_carre(i)\nprint(c.total)  # 55\n","objet.py",[858,1014,1015,1027,1038,1050,1060,1078,1085,1096,1117,1123],{"__ignoreMap":856},[771,1016,1017,1020,1024],{"class":862,"line":863},[771,1018,1019],{"class":870},"class",[771,1021,1023],{"class":1022},"snPdu"," Compteur",[771,1025,1026],{"class":866},":\n",[771,1028,1029,1032,1035],{"class":862,"line":878},[771,1030,1031],{"class":870},"    def",[771,1033,1034],{"class":874}," __init__",[771,1036,1037],{"class":866},"(self):\n",[771,1039,1040,1043,1046,1048],{"class":862,"line":907},[771,1041,1042],{"class":874},"        self",[771,1044,1045],{"class":866},".total ",[771,1047,871],{"class":870},[771,1049,875],{"class":874},[771,1051,1052,1054,1057],{"class":862,"line":929},[771,1053,1031],{"class":870},[771,1055,1056],{"class":1022}," ajouter_carre",[771,1058,1059],{"class":866},"(self, n):\n",[771,1061,1063,1065,1067,1070,1073,1075],{"class":862,"line":1062},5,[771,1064,1042],{"class":874},[771,1066,1045],{"class":866},[771,1068,1069],{"class":870},"+=",[771,1071,1072],{"class":866}," n ",[771,1074,923],{"class":870},[771,1076,1077],{"class":866}," n\n",[771,1079,1081],{"class":862,"line":1080},6,[771,1082,1084],{"emptyLinePlaceholder":1083},true,"\n",[771,1086,1088,1091,1093],{"class":862,"line":1087},7,[771,1089,1090],{"class":866},"c ",[771,1092,871],{"class":870},[771,1094,1095],{"class":866}," Compteur()\n",[771,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115],{"class":862,"line":1098},8,[771,1100,881],{"class":870},[771,1102,884],{"class":866},[771,1104,887],{"class":870},[771,1106,890],{"class":874},[771,1108,893],{"class":866},[771,1110,792],{"class":874},[771,1112,898],{"class":866},[771,1114,901],{"class":874},[771,1116,904],{"class":866},[771,1118,1120],{"class":862,"line":1119},9,[771,1121,1122],{"class":866},"    c.ajouter_carre(i)\n",[771,1124,1126,1128,1131],{"class":862,"line":1125},10,[771,1127,932],{"class":874},[771,1129,1130],{"class":866},"(c.total)  ",[771,1132,939],{"class":938},[599,1134,1135],{},"Le résultat est le même. Le « grain » d'écriture diffère.",[1137,1138,1140,1146],"self-eval-qcm",{"correct":792,"slug":1139},"diversite-langages-c1",[1141,1142,1143],"template",{"v-slot:question":856},[599,1144,1145],{},"Lequel de ces langages est pensé d'abord pour la performance et le contrôle du matériel ?",[1141,1147,1148],{"v-slot:choices":856},[730,1149,1150,1153,1156,1159],{},[733,1151,1152],{},"Python",[733,1154,1155],{},"C",[733,1157,1158],{},"SQL",[733,1160,1161],{},"HTML",[594,1163,1165],{"id":1164},"compilation-interprétation-machines-virtuelles","Compilation, interprétation, machines virtuelles",[599,1167,1168,1169,1172],{},"Une fois le programme écrit, il faut le ",[603,1170,1171],{},"transformer"," en quelque chose que le\nprocesseur sait exécuter. Deux grandes approches existent :",[730,1174,1175,1189],{},[733,1176,1177,1180,1181,1184,1185,1188],{},[603,1178,1179],{},"Compilation"," : un programme spécial, le ",[603,1182,1183],{},"compilateur",", traduit\nentièrement le code source en ",[603,1186,1187],{},"code machine"," une fois pour toutes. On\nexécute ensuite le résultat compilé. C'est rapide à l'exécution, mais\nspécifique à un type de processeur. Exemples : C, C++, Rust, Go.",[733,1190,1191,1194,1195,1198],{},[603,1192,1193],{},"Interprétation"," : un ",[603,1196,1197],{},"interpréteur"," lit le code source et l'exécute\nligne par ligne, sans étape de traduction préalable visible. C'est plus\nlent à l'exécution mais immédiat à essayer. Exemples : Python, JavaScript\n(dans un navigateur), Ruby.",[704,1200,1201],{},[599,1202,1203,1209,1210,1213,1214,1217,1218,1221],{},[603,1204,1205,1208],{},[858,1206,1207],{},"import sys"," en avant-première."," Le mot-clé ",[858,1211,1212],{},"import"," (utiliser une\nbibliothèque externe) sera détaillé au ",[603,1215,1216],{},"cours 6 de ce chapitre",". Ici,\ncontentez-vous de lire : ",[858,1219,1220],{},"sys"," est une bibliothèque standard qui donne accès\nà des informations sur l'interpréteur.",[1223,1224,1225],"python-snippet",{},[850,1226,1228],{"className":852,"code":1227,"language":855,"meta":856,"style":856},"# Python est interprété : pas de compilation visible, on lance directement.\nimport sys\nprint(\"Version de l'interpréteur Python :\", sys.version_info[:3])\nprint(\"Plateforme :\", sys.platform)\n",[858,1229,1230,1235,1242,1261],{"__ignoreMap":856},[771,1231,1232],{"class":862,"line":863},[771,1233,1234],{"class":938},"# Python est interprété : pas de compilation visible, on lance directement.\n",[771,1236,1237,1239],{"class":862,"line":878},[771,1238,1212],{"class":870},[771,1240,1241],{"class":866}," sys\n",[771,1243,1244,1246,1248,1252,1255,1258],{"class":862,"line":907},[771,1245,932],{"class":874},[771,1247,893],{"class":866},[771,1249,1251],{"class":1250},"sIIMD","\"Version de l'interpréteur Python :\"",[771,1253,1254],{"class":866},", sys.version_info[:",[771,1256,1257],{"class":874},"3",[771,1259,1260],{"class":866},"])\n",[771,1262,1263,1265,1267,1270],{"class":862,"line":929},[771,1264,932],{"class":874},[771,1266,893],{"class":866},[771,1268,1269],{"class":1250},"\"Plateforme :\"",[771,1271,1272],{"class":866},", sys.platform)\n",[599,1274,1275],{},"Sortie (varie fortement selon votre machine ou votre interpréteur) :",[850,1277,1282],{"className":1278,"code":1280,"language":1281},[1279],"language-text","Version de l'interpréteur Python : (3, 12, 0)\nPlateforme : linux\n","text",[858,1283,1280],{"__ignoreMap":856},[704,1285,1286],{},[599,1287,1288,1291,1292,1295,1296,1299,1300,1303],{},[603,1289,1290],{},"Cas intermédiaire"," : Java compile vers un ",[603,1293,1294],{},"bytecode"," exécuté par une\n",[603,1297,1298],{},"machine virtuelle"," (la JVM). Python fait de même en interne avec un\nbytecode ",[858,1301,1302],{},".pyc",", mais l'utilisateur ne le voit pas. Il y a donc un continuum\nentre compilation pure et interprétation pure.",[594,1305,1307],{"id":1306},"unité-sous-la-diversité","Unité sous la diversité",[599,1309,1310,1311,1314],{},"Au-delà des paradigmes et des manières d'exécuter, ",[603,1312,1313],{},"presque tous les langages\ngénéralistes"," partagent les mêmes briques de construction :",[633,1316,1317,1329],{},[636,1318,1319],{},[639,1320,1321,1324,1326],{},[642,1322,1323],{},"Construction",[642,1325,1152],{},[642,1327,1328],{},"Autre langage (C ici)",[649,1330,1331,1346,1361,1376,1391],{},[639,1332,1333,1336,1341],{},[654,1334,1335],{},"Affectation",[654,1337,1338],{},[858,1339,1340],{},"x = 5",[654,1342,1343],{},[858,1344,1345],{},"int x = 5;",[639,1347,1348,1351,1356],{},[654,1349,1350],{},"Conditionnelle",[654,1352,1353],{},[858,1354,1355],{},"if x > 0:",[654,1357,1358],{},[858,1359,1360],{},"if (x > 0) { … }",[639,1362,1363,1366,1371],{},[654,1364,1365],{},"Boucle bornée",[654,1367,1368],{},[858,1369,1370],{},"for i in range(10):",[654,1372,1373],{},[858,1374,1375],{},"for (int i=0; i\u003C10; i++) { … }",[639,1377,1378,1381,1386],{},[654,1379,1380],{},"Boucle non bornée",[654,1382,1383],{},[858,1384,1385],{},"while condition:",[654,1387,1388],{},[858,1389,1390],{},"while (condition) { … }",[639,1392,1393,1396,1401],{},[654,1394,1395],{},"Fonction",[654,1397,1398],{},[858,1399,1400],{},"def f(x): return …",[654,1402,1403],{},[858,1404,1405],{},"int f(int x) { return …; }",[599,1407,1408,1409,1412],{},"Quand vous découvrirez un nouveau langage, ",[603,1410,1411],{},"cherchez d'abord ces cinq\nconstructions",". Vous serez productif beaucoup plus vite que si vous abordez\nle langage comme une nouveauté complète.",[1137,1414,1416,1421],{"correct":792,"slug":1415},"diversite-langages-c2",[1141,1417,1418],{"v-slot:question":856},[599,1419,1420],{},"Python est-il un langage strictement fonctionnel ?",[1141,1422,1423],{"v-slot:choices":856},[730,1424,1425,1428,1431],{},[733,1426,1427],{},"Oui, uniquement fonctionnel",[733,1429,1430],{},"Non, il est multi-paradigme",[733,1432,1433],{},"Non, il est strictement objet",[594,1435,1437],{"id":1436},"pièges-courants","Pièges courants",[1439,1440,1441],"warning",{},[730,1442,1443,1449,1452],{},[733,1444,1445,1448],{},[603,1446,1447],{},"Le « meilleur » langage n'existe pas dans l'absolu"," — seulement le\nmeilleur langage pour un usage donné.",[733,1450,1451],{},"Compilé ≠ rapide systématiquement. Un mauvais algorithme en C peut être\nbattu par un bon algorithme en Python.",[733,1453,1454,1455,1458],{},"Tous les langages n'ont pas la même notion d'erreur. Python lève des\n",[603,1456,1457],{},"exceptions"," ; C affiche parfois des comportements bizarres sans\nmessage clair (« undefined behavior »). C'est culturel autant que technique.",[594,1460,1462],{"id":1461},"pour-aller-plus-loin","Pour aller plus loin",[599,1464,1465,1466,1469,1470,1472],{},"Le langage que vous apprendrez après Python sera plus facile que Python ne\nl'a été : vous chercherez juste les constructions équivalentes. C'est ce\nqu'on appelle le ",[603,1467,1468],{},"transfert pédagogique",". C'est l'objectif central de cet\nitem ",[616,1471],{"code":589}," du programme.",[1474,1475,1476],"style",{},"html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}html pre.shiki code .snPdu, html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":856,"searchDepth":878,"depth":878,"links":1478},[1479,1480,1481,1482,1483,1484,1485],{"id":596,"depth":878,"text":597},{"id":627,"depth":878,"text":628},{"id":720,"depth":878,"text":721},{"id":1164,"depth":878,"text":1165},{"id":1306,"depth":878,"text":1307},{"id":1436,"depth":878,"text":1437},{"id":1461,"depth":878,"text":1462},"Pourquoi tant de langages, ce qu'ils ont en commun, et la différence entre langage compilé et langage interprété.",null,"md",{},[1491,1495],{"slug":1139,"kind":1492,"question":1145,"choices":1493,"correct":792,"multi":1494,"explanation":856},"qcm",[1152,1155,1158,1161],false,{"slug":1415,"kind":1492,"question":1420,"choices":1496,"correct":792,"multi":1494,"explanation":856},[1427,1430,1433],{"title":387,"description":1486},"RRzvw12At2Yq8tGBKyd55CSZaZzwJtMLY_EaPz54BOY",{"id":1500,"title":391,"bo":1501,"body":1503,"description":2950,"eval":1487,"extension":1488,"labo":1487,"meta":2951,"navigation":1083,"path":392,"quizzes":2952,"readingTime":863,"seo":2959,"stem":393,"tp":1487,"__hash__":2960},"cours\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F2.constructions-elementaires.md",[1502],"PG01",{"type":591,"value":1504,"toc":2934},[1505,1507,1532,1543,1547,1558,1606,1620,1661,1665,1672,1758,1765,1842,1864,1868,1871,1916,1923,1953,2035,2038,2044,2048,2059,2122,2139,2142,2147,2212,2219,2357,2381,2387,2399,2447,2450,2456,2478,2493,2519,2522,2563,2570,2580,2646,2648,2654,2671,2769,2771,2777,2788,2798,2852,2864,2866,2916,2918,2931],[594,1506,597],{"id":596},[599,1508,1509,1510,1513,1514,1517,1518,1521,1522,1525,1526,1529,1530],{},"Tout programme se construit à partir d'un petit nombre de briques de base.\n",[603,1511,1512],{},"Affecter une valeur"," à un nom, ",[603,1515,1516],{},"évaluer une expression"," pour produire\nune valeur, ",[603,1519,1520],{},"enchaîner"," des instructions, ",[603,1523,1524],{},"choisir"," entre deux chemins\navec une condition, ",[603,1527,1528],{},"répéter"," un bloc de code : ces cinq mécanismes\nsuffisent à exprimer la quasi-totalité des programmes que vous écrirez en\nNSI. ",[616,1531],{"code":1502},[599,1533,1534,1535,1538,1539,1542],{},"L'objectif de ce cours n'est pas de vous faire découvrir ces notions — vous\nles avez déjà manipulées en Seconde et en début de Première — mais de ",[603,1536,1537],{},"les\nnommer précisément"," et de les ",[603,1540,1541],{},"distinguer"," les unes des autres.",[594,1544,1546],{"id":1545},"variables-et-affectation","Variables et affectation",[599,1548,1549,1550,1553,1554,1557],{},"Une ",[603,1551,1552],{},"variable"," est un nom associé à une valeur stockée en mémoire.\nL'",[603,1555,1556],{},"affectation"," crée ou met à jour cette association.",[850,1559,1561],{"className":852,"code":1560,"language":855,"meta":856,"style":856},"age = 16          # création de la variable age, valeur 16\nage = age + 1     # mise à jour : age vaut désormais 17\nprenom = \"Ada\"    # variable de type chaîne de caractères\n",[858,1562,1563,1576,1593],{"__ignoreMap":856},[771,1564,1565,1568,1570,1573],{"class":862,"line":863},[771,1566,1567],{"class":866},"age ",[771,1569,871],{"class":870},[771,1571,1572],{"class":874}," 16",[771,1574,1575],{"class":938},"          # création de la variable age, valeur 16\n",[771,1577,1578,1580,1582,1585,1587,1590],{"class":862,"line":878},[771,1579,1567],{"class":866},[771,1581,871],{"class":870},[771,1583,1584],{"class":866}," age ",[771,1586,918],{"class":870},[771,1588,1589],{"class":874}," 1",[771,1591,1592],{"class":938},"     # mise à jour : age vaut désormais 17\n",[771,1594,1595,1598,1600,1603],{"class":862,"line":907},[771,1596,1597],{"class":866},"prenom ",[771,1599,871],{"class":870},[771,1601,1602],{"class":1250}," \"Ada\"",[771,1604,1605],{"class":938},"    # variable de type chaîne de caractères\n",[599,1607,1608,1609,1611,1612,1615,1616,1619],{},"Le signe ",[858,1610,871],{}," n'est ",[603,1613,1614],{},"pas"," un signe d'égalité mathématique. Il signifie\n« range la valeur de droite dans la case nommée à gauche ». La ligne\n",[858,1617,1618],{},"age = age + 1"," n'a aucun sens en mathématiques (un nombre ne peut être\négal à lui-même augmenté de 1), mais elle a un sens parfait en informatique.",[1439,1621,1622,1632],{},[599,1623,1624,1625,1627,1628,1631],{},"Ne confondez pas ",[858,1626,871],{}," (affectation) et ",[858,1629,1630],{},"=="," (test d'égalité).",[850,1633,1635],{"className":852,"code":1634,"language":855,"meta":856,"style":856},"x = 5        # affecte 5 à x\nx == 5       # renvoie True : test d'égalité\n",[858,1636,1637,1650],{"__ignoreMap":856},[771,1638,1639,1642,1644,1647],{"class":862,"line":863},[771,1640,1641],{"class":866},"x ",[771,1643,871],{"class":870},[771,1645,1646],{"class":874}," 5",[771,1648,1649],{"class":938},"        # affecte 5 à x\n",[771,1651,1652,1654,1656,1658],{"class":862,"line":878},[771,1653,1641],{"class":866},[771,1655,1630],{"class":870},[771,1657,1646],{"class":874},[771,1659,1660],{"class":938},"       # renvoie True : test d'égalité\n",[594,1662,1664],{"id":1663},"types-de-base","Types de base",[599,1666,1667,1668,1671],{},"Toute valeur en Python a un ",[603,1669,1670],{},"type"," qui détermine ce qu'on peut faire avec.",[633,1673,1674,1687],{},[636,1675,1676],{},[639,1677,1678,1681,1684],{},[642,1679,1680],{},"Type",[642,1682,1683],{},"Exemple",[642,1685,1686],{},"Usage",[649,1688,1689,1707,1725,1740],{},[639,1690,1691,1696,1704],{},[654,1692,1693],{},[858,1694,1695],{},"int",[654,1697,1698,898,1701],{},[858,1699,1700],{},"42",[858,1702,1703],{},"-7",[654,1705,1706],{},"entiers",[639,1708,1709,1714,1722],{},[654,1710,1711],{},[858,1712,1713],{},"float",[654,1715,1716,898,1719],{},[858,1717,1718],{},"3.14",[858,1720,1721],{},"-0.5",[654,1723,1724],{},"nombres à virgule",[639,1726,1727,1732,1737],{},[654,1728,1729],{},[858,1730,1731],{},"str",[654,1733,1734],{},[858,1735,1736],{},"\"Bonjour\"",[654,1738,1739],{},"chaînes de caractères",[639,1741,1742,1747,1755],{},[654,1743,1744],{},[858,1745,1746],{},"bool",[654,1748,1749,898,1752],{},[858,1750,1751],{},"True",[858,1753,1754],{},"False",[654,1756,1757],{},"valeurs logiques",[599,1759,1760,1761,1764],{},"La fonction ",[858,1762,1763],{},"type(...)"," permet d'interroger le type d'une valeur :",[850,1766,1768],{"className":852,"code":1767,"language":855,"meta":856,"style":856},"print(type(42))        # \u003Cclass 'int'>\nprint(type(3.14))      # \u003Cclass 'float'>\nprint(type(\"Ada\"))     # \u003Cclass 'str'>\nprint(type(True))      # \u003Cclass 'bool'>\n",[858,1769,1770,1788,1806,1825],{"__ignoreMap":856},[771,1771,1772,1774,1776,1778,1780,1782,1785],{"class":862,"line":863},[771,1773,932],{"class":874},[771,1775,893],{"class":866},[771,1777,1670],{"class":874},[771,1779,893],{"class":866},[771,1781,1700],{"class":874},[771,1783,1784],{"class":866},"))        ",[771,1786,1787],{"class":938},"# \u003Cclass 'int'>\n",[771,1789,1790,1792,1794,1796,1798,1800,1803],{"class":862,"line":878},[771,1791,932],{"class":874},[771,1793,893],{"class":866},[771,1795,1670],{"class":874},[771,1797,893],{"class":866},[771,1799,1718],{"class":874},[771,1801,1802],{"class":866},"))      ",[771,1804,1805],{"class":938},"# \u003Cclass 'float'>\n",[771,1807,1808,1810,1812,1814,1816,1819,1822],{"class":862,"line":907},[771,1809,932],{"class":874},[771,1811,893],{"class":866},[771,1813,1670],{"class":874},[771,1815,893],{"class":866},[771,1817,1818],{"class":1250},"\"Ada\"",[771,1820,1821],{"class":866},"))     ",[771,1823,1824],{"class":938},"# \u003Cclass 'str'>\n",[771,1826,1827,1829,1831,1833,1835,1837,1839],{"class":862,"line":929},[771,1828,932],{"class":874},[771,1830,893],{"class":866},[771,1832,1670],{"class":874},[771,1834,893],{"class":866},[771,1836,1751],{"class":874},[771,1838,1802],{"class":866},[771,1840,1841],{"class":938},"# \u003Cclass 'bool'>\n",[1137,1843,1845,1854],{"correct":792,"slug":1844},"constructions-elementaires-c1",[1141,1846,1847],{"v-slot:question":856},[599,1848,1849,1850,1853],{},"Quel est le type de l'expression ",[858,1851,1852],{},"5 \u002F 2"," en Python 3 ?",[1141,1855,1856],{"v-slot:choices":856},[730,1857,1858,1860,1862],{},[733,1859,1695],{},[733,1861,1713],{},[733,1863,1731],{},[594,1865,1867],{"id":1866},"expressions-et-instructions","Expressions et instructions",[599,1869,1870],{},"Distinction essentielle :",[730,1872,1873,1896],{},[733,1874,1549,1875,1878,1879,1882,1883,898,1886,898,1889,898,1892,1895],{},[603,1876,1877],{},"expression"," est évaluée et ",[603,1880,1881],{},"produit une valeur",". Exemples :\n",[858,1884,1885],{},"2 + 3",[858,1887,1888],{},"x * 10",[858,1890,1891],{},"\"a\" + \"b\"",[858,1893,1894],{},"len(\"Ada\") > 2",".",[733,1897,1549,1898,1901,1902,1905,1906,1908,1909,1912,1913,1915],{},[603,1899,1900],{},"instruction"," ",[603,1903,1904],{},"fait une action"," sans nécessairement produire de\nvaleur. Exemples : ",[858,1907,1340],{}," (affectation), ",[858,1910,1911],{},"print(x)"," (affichage), ",[858,1914,1355],{},"\n(test conditionnel).",[599,1917,1918,1919,1922],{},"Une instruction peut ",[603,1920,1921],{},"contenir"," des expressions :",[850,1924,1926],{"className":852,"code":1925,"language":855,"meta":856,"style":856},"y = (x + 5) * 2      # (x + 5) * 2 est une expression, y = ... est une instruction\n",[858,1927,1928],{"__ignoreMap":856},[771,1929,1930,1933,1935,1938,1940,1942,1945,1947,1950],{"class":862,"line":863},[771,1931,1932],{"class":866},"y ",[771,1934,871],{"class":870},[771,1936,1937],{"class":866}," (x ",[771,1939,918],{"class":870},[771,1941,1646],{"class":874},[771,1943,1944],{"class":866},") ",[771,1946,923],{"class":870},[771,1948,1949],{"class":874}," 2",[771,1951,1952],{"class":938},"      # (x + 5) * 2 est une expression, y = ... est une instruction\n",[1223,1954,1955],{},[850,1956,1958],{"className":852,"code":1957,"language":855,"meta":856,"style":856},"# Expression et instruction côte à côte\nx = 7                          # instruction d'affectation\nexpression = (x + 3) * 2       # l'expression (x + 3) * 2 vaut 20\nprint(\"L'expression vaut :\", expression)\nprint(\"Comparaison x > 5 :\", x > 5)   # affiche True\n",[858,1959,1960,1965,1977,2000,2012],{"__ignoreMap":856},[771,1961,1962],{"class":862,"line":863},[771,1963,1964],{"class":938},"# Expression et instruction côte à côte\n",[771,1966,1967,1969,1971,1974],{"class":862,"line":878},[771,1968,1641],{"class":866},[771,1970,871],{"class":870},[771,1972,1973],{"class":874}," 7",[771,1975,1976],{"class":938},"                          # instruction d'affectation\n",[771,1978,1979,1982,1984,1986,1988,1991,1993,1995,1997],{"class":862,"line":907},[771,1980,1981],{"class":866},"expression ",[771,1983,871],{"class":870},[771,1985,1937],{"class":866},[771,1987,918],{"class":870},[771,1989,1990],{"class":874}," 3",[771,1992,1944],{"class":866},[771,1994,923],{"class":870},[771,1996,1949],{"class":874},[771,1998,1999],{"class":938},"       # l'expression (x + 3) * 2 vaut 20\n",[771,2001,2002,2004,2006,2009],{"class":862,"line":929},[771,2003,932],{"class":874},[771,2005,893],{"class":866},[771,2007,2008],{"class":1250},"\"L'expression vaut :\"",[771,2010,2011],{"class":866},", expression)\n",[771,2013,2014,2016,2018,2021,2024,2027,2029,2032],{"class":862,"line":1062},[771,2015,932],{"class":874},[771,2017,893],{"class":866},[771,2019,2020],{"class":1250},"\"Comparaison x > 5 :\"",[771,2022,2023],{"class":866},", x ",[771,2025,2026],{"class":870},">",[771,2028,1646],{"class":874},[771,2030,2031],{"class":866},")   ",[771,2033,2034],{"class":938},"# affiche True\n",[599,2036,2037],{},"Sortie attendue :",[850,2039,2042],{"className":2040,"code":2041,"language":1281},[1279],"L'expression vaut : 20\nComparaison x > 5 : True\n",[858,2043,2041],{"__ignoreMap":856},[594,2045,2047],{"id":2046},"séquence-dinstructions","Séquence d'instructions",[599,2049,2050,2051,2054,2055,2058],{},"La forme la plus simple d'un programme est une ",[603,2052,2053],{},"séquence"," : on enchaîne\nles instructions, exécutées ",[603,2056,2057],{},"dans l'ordre",", de haut en bas.",[850,2060,2062],{"className":852,"code":2061,"language":855,"meta":856,"style":856},"prix_ht = 100\ntaux_tva = 0.20\nprix_ttc = prix_ht * (1 + taux_tva)\nprint(\"Prix TTC :\", prix_ttc)   # 120.0\n",[858,2063,2064,2074,2084,2107],{"__ignoreMap":856},[771,2065,2066,2069,2071],{"class":862,"line":863},[771,2067,2068],{"class":866},"prix_ht ",[771,2070,871],{"class":870},[771,2072,2073],{"class":874}," 100\n",[771,2075,2076,2079,2081],{"class":862,"line":878},[771,2077,2078],{"class":866},"taux_tva ",[771,2080,871],{"class":870},[771,2082,2083],{"class":874}," 0.20\n",[771,2085,2086,2089,2091,2094,2096,2099,2101,2104],{"class":862,"line":907},[771,2087,2088],{"class":866},"prix_ttc ",[771,2090,871],{"class":870},[771,2092,2093],{"class":866}," prix_ht ",[771,2095,923],{"class":870},[771,2097,2098],{"class":866}," (",[771,2100,792],{"class":874},[771,2102,2103],{"class":870}," +",[771,2105,2106],{"class":866}," taux_tva)\n",[771,2108,2109,2111,2113,2116,2119],{"class":862,"line":929},[771,2110,932],{"class":874},[771,2112,893],{"class":866},[771,2114,2115],{"class":1250},"\"Prix TTC :\"",[771,2117,2118],{"class":866},", prix_ttc)   ",[771,2120,2121],{"class":938},"# 120.0\n",[599,2123,2124,2125,2128,2129,2132,2133,614,2136,1895],{},"Changer l'ordre des deux premières lignes ne pose pas de problème ici, mais\non ne peut pas calculer ",[858,2126,2127],{},"prix_ttc"," avant d'avoir défini ",[858,2130,2131],{},"prix_ht"," et\n",[858,2134,2135],{},"taux_tva",[603,2137,2138],{},"L'ordre compte",[594,2140,1350],{"id":2141},"conditionnelle",[599,2143,1549,2144,2146],{},[603,2145,2141],{}," permet d'exécuter un bloc d'instructions seulement si\nune expression booléenne est vraie.",[850,2148,2150],{"className":852,"code":2149,"language":855,"meta":856,"style":856},"note = 12\n\nif note >= 10:\n    print(\"Admis\")\nelse:\n    print(\"Refusé\")\n",[858,2151,2152,2162,2166,2182,2194,2201],{"__ignoreMap":856},[771,2153,2154,2157,2159],{"class":862,"line":863},[771,2155,2156],{"class":866},"note ",[771,2158,871],{"class":870},[771,2160,2161],{"class":874}," 12\n",[771,2163,2164],{"class":862,"line":878},[771,2165,1084],{"emptyLinePlaceholder":1083},[771,2167,2168,2171,2174,2177,2180],{"class":862,"line":907},[771,2169,2170],{"class":870},"if",[771,2172,2173],{"class":866}," note ",[771,2175,2176],{"class":870},">=",[771,2178,2179],{"class":874}," 10",[771,2181,1026],{"class":866},[771,2183,2184,2187,2189,2192],{"class":862,"line":929},[771,2185,2186],{"class":874},"    print",[771,2188,893],{"class":866},[771,2190,2191],{"class":1250},"\"Admis\"",[771,2193,965],{"class":866},[771,2195,2196,2199],{"class":862,"line":1062},[771,2197,2198],{"class":870},"else",[771,2200,1026],{"class":866},[771,2202,2203,2205,2207,2210],{"class":862,"line":1080},[771,2204,2186],{"class":874},[771,2206,893],{"class":866},[771,2208,2209],{"class":1250},"\"Refusé\"",[771,2211,965],{"class":866},[599,2213,2214,2215,2218],{},"Pour plusieurs cas, on enchaîne avec ",[858,2216,2217],{},"elif"," :",[850,2220,2222],{"className":852,"code":2221,"language":855,"meta":856,"style":856},"note = 14\n\nif note >= 16:\n    mention = \"Très bien\"\nelif note >= 14:\n    mention = \"Bien\"\nelif note >= 12:\n    mention = \"Assez bien\"\nelif note >= 10:\n    mention = \"Passable\"\nelse:\n    mention = \"Refusé\"\n\nprint(mention)   # Bien\n",[858,2223,2224,2233,2237,2249,2259,2272,2281,2294,2303,2315,2324,2331,2341,2346],{"__ignoreMap":856},[771,2225,2226,2228,2230],{"class":862,"line":863},[771,2227,2156],{"class":866},[771,2229,871],{"class":870},[771,2231,2232],{"class":874}," 14\n",[771,2234,2235],{"class":862,"line":878},[771,2236,1084],{"emptyLinePlaceholder":1083},[771,2238,2239,2241,2243,2245,2247],{"class":862,"line":907},[771,2240,2170],{"class":870},[771,2242,2173],{"class":866},[771,2244,2176],{"class":870},[771,2246,1572],{"class":874},[771,2248,1026],{"class":866},[771,2250,2251,2254,2256],{"class":862,"line":929},[771,2252,2253],{"class":866},"    mention ",[771,2255,871],{"class":870},[771,2257,2258],{"class":1250}," \"Très bien\"\n",[771,2260,2261,2263,2265,2267,2270],{"class":862,"line":1062},[771,2262,2217],{"class":870},[771,2264,2173],{"class":866},[771,2266,2176],{"class":870},[771,2268,2269],{"class":874}," 14",[771,2271,1026],{"class":866},[771,2273,2274,2276,2278],{"class":862,"line":1080},[771,2275,2253],{"class":866},[771,2277,871],{"class":870},[771,2279,2280],{"class":1250}," \"Bien\"\n",[771,2282,2283,2285,2287,2289,2292],{"class":862,"line":1087},[771,2284,2217],{"class":870},[771,2286,2173],{"class":866},[771,2288,2176],{"class":870},[771,2290,2291],{"class":874}," 12",[771,2293,1026],{"class":866},[771,2295,2296,2298,2300],{"class":862,"line":1098},[771,2297,2253],{"class":866},[771,2299,871],{"class":870},[771,2301,2302],{"class":1250}," \"Assez bien\"\n",[771,2304,2305,2307,2309,2311,2313],{"class":862,"line":1119},[771,2306,2217],{"class":870},[771,2308,2173],{"class":866},[771,2310,2176],{"class":870},[771,2312,2179],{"class":874},[771,2314,1026],{"class":866},[771,2316,2317,2319,2321],{"class":862,"line":1125},[771,2318,2253],{"class":866},[771,2320,871],{"class":870},[771,2322,2323],{"class":1250}," \"Passable\"\n",[771,2325,2327,2329],{"class":862,"line":2326},11,[771,2328,2198],{"class":870},[771,2330,1026],{"class":866},[771,2332,2334,2336,2338],{"class":862,"line":2333},12,[771,2335,2253],{"class":866},[771,2337,871],{"class":870},[771,2339,2340],{"class":1250}," \"Refusé\"\n",[771,2342,2344],{"class":862,"line":2343},13,[771,2345,1084],{"emptyLinePlaceholder":1083},[771,2347,2349,2351,2354],{"class":862,"line":2348},14,[771,2350,932],{"class":874},[771,2352,2353],{"class":866},"(mention)   ",[771,2355,2356],{"class":938},"# Bien\n",[1439,2358,2359],{},[599,2360,2361,2367,2368,2370,2371,2374,2375,2377,2378,2380],{},[603,2362,2363,2364],{},"Indentation et ",[858,2365,2366],{},":"," : en Python, le bloc qui suit un ",[858,2369,2170],{}," est délimité\n",[603,2372,2373],{},"uniquement par l'indentation",", et la ligne du ",[858,2376,2170],{}," se termine par ",[858,2379,2366],{},".\nOublier l'un des deux est une erreur classique en début d'année.",[594,2382,2384,2385],{"id":2383},"boucles-bornées-for","Boucles bornées : ",[858,2386,881],{},[599,2388,1549,2389,2392,2393,2396,2397,1895],{},[603,2390,2391],{},"boucle bornée"," est une boucle dont ",[603,2394,2395],{},"on connaît à l'avance le nombre\nd'itérations",". En Python, c'est ",[858,2398,881],{},[850,2400,2402],{"className":852,"code":2401,"language":855,"meta":856,"style":856},"# Affiche les carrés de 1 à 5\nfor i in range(1, 6):\n    print(i, \"→\", i * i)\n",[858,2403,2404,2409,2429],{"__ignoreMap":856},[771,2405,2406],{"class":862,"line":863},[771,2407,2408],{"class":938},"# Affiche les carrés de 1 à 5\n",[771,2410,2411,2413,2415,2417,2419,2421,2423,2425,2427],{"class":862,"line":878},[771,2412,881],{"class":870},[771,2414,884],{"class":866},[771,2416,887],{"class":870},[771,2418,890],{"class":874},[771,2420,893],{"class":866},[771,2422,792],{"class":874},[771,2424,898],{"class":866},[771,2426,901],{"class":874},[771,2428,904],{"class":866},[771,2430,2431,2433,2436,2439,2442,2444],{"class":862,"line":907},[771,2432,2186],{"class":874},[771,2434,2435],{"class":866},"(i, ",[771,2437,2438],{"class":1250},"\"→\"",[771,2440,2441],{"class":866},", i ",[771,2443,923],{"class":870},[771,2445,2446],{"class":866}," i)\n",[599,2448,2449],{},"Sortie :",[850,2451,2454],{"className":2452,"code":2453,"language":1281},[1279],"1 → 1\n2 → 4\n3 → 9\n4 → 16\n5 → 25\n",[858,2455,2453],{"__ignoreMap":856},[599,2457,1760,2458,2461,2462,815,2465,1901,2468,2471,2472,1611,2475,1895],{},[858,2459,2460],{},"range(a, b)"," produit les entiers de ",[858,2463,2464],{},"a",[858,2466,2467],{},"b - 1",[603,2469,2470],{},"inclus",".\nLa borne supérieure ",[858,2473,2474],{},"b",[603,2476,2477],{},"jamais atteinte",[1439,2479,2480],{},[599,2481,2482,2485,2486,2489,2490,2492],{},[858,2483,2484],{},"range(5)"," produit ",[858,2487,2488],{},"0, 1, 2, 3, 4"," — l'indice ",[858,2491,830],{}," n'est jamais\natteint. C'est l'un des pièges les plus fréquents.",[1137,2494,2496,2505],{"correct":792,"slug":2495},"constructions-elementaires-c2",[1141,2497,2498],{"v-slot:question":856},[599,2499,2500,2501,2504],{},"Combien de fois la boucle ",[858,2502,2503],{},"for i in range(3, 8):"," exécute-t-elle son corps ?",[1141,2506,2507],{"v-slot:choices":856},[730,2508,2509,2511,2513,2516],{},[733,2510,1257],{},[733,2512,830],{},[733,2514,2515],{},"8",[733,2517,2518],{},"11",[599,2520,2521],{},"On peut aussi parcourir directement une séquence (liste, chaîne…) :",[850,2523,2525],{"className":852,"code":2524,"language":855,"meta":856,"style":856},"for lettre in \"NSI\":\n    print(lettre)\n# N\n# S\n# I\n",[858,2526,2527,2541,2548,2553,2558],{"__ignoreMap":856},[771,2528,2529,2531,2534,2536,2539],{"class":862,"line":863},[771,2530,881],{"class":870},[771,2532,2533],{"class":866}," lettre ",[771,2535,887],{"class":870},[771,2537,2538],{"class":1250}," \"NSI\"",[771,2540,1026],{"class":866},[771,2542,2543,2545],{"class":862,"line":878},[771,2544,2186],{"class":874},[771,2546,2547],{"class":866},"(lettre)\n",[771,2549,2550],{"class":862,"line":907},[771,2551,2552],{"class":938},"# N\n",[771,2554,2555],{"class":862,"line":929},[771,2556,2557],{"class":938},"# S\n",[771,2559,2560],{"class":862,"line":1062},[771,2561,2562],{"class":938},"# I\n",[594,2564,2566,2567],{"id":2565},"boucles-non-bornées-while","Boucles non bornées : ",[858,2568,2569],{},"while",[599,2571,1549,2572,2575,2576,2579],{},[603,2573,2574],{},"boucle non bornée"," s'exécute ",[603,2577,2578],{},"tant qu'une condition est vraie",", sans\nqu'on sache forcément à l'avance combien d'itérations auront lieu. C'est la\nboucle du « j'avance jusqu'à ce que… » plutôt que celle du « je fais N pas ».",[850,2581,2583],{"className":852,"code":2582,"language":855,"meta":856,"style":856},"# Compte à rebours qui s'arrête à 0\nn = 3\nwhile n >= 0:\n    print(n)\n    n = n - 1\nprint(\"Décollage !\")\n",[858,2584,2585,2590,2600,2613,2620,2635],{"__ignoreMap":856},[771,2586,2587],{"class":862,"line":863},[771,2588,2589],{"class":938},"# Compte à rebours qui s'arrête à 0\n",[771,2591,2592,2595,2597],{"class":862,"line":878},[771,2593,2594],{"class":866},"n ",[771,2596,871],{"class":870},[771,2598,2599],{"class":874}," 3\n",[771,2601,2602,2604,2606,2608,2611],{"class":862,"line":907},[771,2603,2569],{"class":870},[771,2605,1072],{"class":866},[771,2607,2176],{"class":870},[771,2609,2610],{"class":874}," 0",[771,2612,1026],{"class":866},[771,2614,2615,2617],{"class":862,"line":929},[771,2616,2186],{"class":874},[771,2618,2619],{"class":866},"(n)\n",[771,2621,2622,2625,2627,2629,2632],{"class":862,"line":1062},[771,2623,2624],{"class":866},"    n ",[771,2626,871],{"class":870},[771,2628,1072],{"class":866},[771,2630,2631],{"class":870},"-",[771,2633,2634],{"class":874}," 1\n",[771,2636,2637,2639,2641,2644],{"class":862,"line":1080},[771,2638,932],{"class":874},[771,2640,893],{"class":866},[771,2642,2643],{"class":1250},"\"Décollage !\"",[771,2645,965],{"class":866},[599,2647,2449],{},[850,2649,2652],{"className":2650,"code":2651,"language":1281},[1279],"3\n2\n1\n0\nDécollage !\n",[858,2653,2651],{"__ignoreMap":856},[599,2655,2656,2659,2660,2666,2667,2670],{},[603,2657,2658],{},"Question vitale"," : qu'est-ce qui garantit que la boucle s'arrête ? Ici,\nchaque itération ",[603,2661,2662,2663],{},"diminue ",[858,2664,2665],{},"n",", donc la condition ",[858,2668,2669],{},"n >= 0"," finira par\nêtre fausse. Sans cette progression, la boucle tournerait à l'infini.",[1223,2672,2673],{},[850,2674,2676],{"className":852,"code":2675,"language":855,"meta":856,"style":856},"# Recherche d'un diviseur impair > 1 d'un nombre\nn = 91\nd = 3\nwhile n % d != 0:\n    d = d + 2\nprint(f\"Le plus petit diviseur impair > 1 de {n} est {d}\")\n",[858,2677,2678,2683,2692,2701,2720,2734],{"__ignoreMap":856},[771,2679,2680],{"class":862,"line":863},[771,2681,2682],{"class":938},"# Recherche d'un diviseur impair > 1 d'un nombre\n",[771,2684,2685,2687,2689],{"class":862,"line":878},[771,2686,2594],{"class":866},[771,2688,871],{"class":870},[771,2690,2691],{"class":874}," 91\n",[771,2693,2694,2697,2699],{"class":862,"line":907},[771,2695,2696],{"class":866},"d ",[771,2698,871],{"class":870},[771,2700,2599],{"class":874},[771,2702,2703,2705,2707,2710,2713,2716,2718],{"class":862,"line":929},[771,2704,2569],{"class":870},[771,2706,1072],{"class":866},[771,2708,2709],{"class":870},"%",[771,2711,2712],{"class":866}," d ",[771,2714,2715],{"class":870},"!=",[771,2717,2610],{"class":874},[771,2719,1026],{"class":866},[771,2721,2722,2725,2727,2729,2731],{"class":862,"line":1062},[771,2723,2724],{"class":866},"    d ",[771,2726,871],{"class":870},[771,2728,2712],{"class":866},[771,2730,918],{"class":870},[771,2732,2733],{"class":874}," 2\n",[771,2735,2736,2738,2740,2743,2746,2749,2751,2754,2757,2759,2762,2764,2767],{"class":862,"line":1080},[771,2737,932],{"class":874},[771,2739,893],{"class":866},[771,2741,2742],{"class":870},"f",[771,2744,2745],{"class":1250},"\"Le plus petit diviseur impair > 1 de ",[771,2747,2748],{"class":874},"{",[771,2750,2665],{"class":866},[771,2752,2753],{"class":874},"}",[771,2755,2756],{"class":1250}," est ",[771,2758,2748],{"class":874},[771,2760,2761],{"class":866},"d",[771,2763,2753],{"class":874},[771,2765,2766],{"class":1250},"\"",[771,2768,965],{"class":866},[599,2770,2037],{},[850,2772,2775],{"className":2773,"code":2774,"language":1281},[1279],"Le plus petit diviseur impair > 1 de 91 est 7\n",[858,2776,2774],{"__ignoreMap":856},[1439,2778,2779],{},[599,2780,2781,2784,2785],{},[603,2782,2783],{},"Boucle infinie"," : si la condition d'arrêt n'est jamais atteinte, le\nprogramme ne termine pas. Toujours se demander : ",[714,2786,2787],{},"qu'est-ce qui change à\nchaque itération pour rendre la condition fausse à terme ?",[594,2789,2791,2792,2794,2795,2797],{"id":2790},"quand-utiliser-for-quand-utiliser-while","Quand utiliser ",[858,2793,881],{},", quand utiliser ",[858,2796,2569],{}," ?",[633,2799,2800,2810],{},[636,2801,2802],{},[639,2803,2804,2807],{},[642,2805,2806],{},"Situation",[642,2808,2809],{},"Boucle adaptée",[649,2811,2812,2825,2834,2843],{},[639,2813,2814,2821],{},[654,2815,2816,2817,2820],{},"Parcourir une liste ou un ",[858,2818,2819],{},"range"," connu",[654,2822,2823],{},[858,2824,881],{},[639,2826,2827,2830],{},[654,2828,2829],{},"Répéter un nombre connu de fois",[654,2831,2832],{},[858,2833,881],{},[639,2835,2836,2839],{},[654,2837,2838],{},"Attendre qu'une condition devienne fausse",[654,2840,2841],{},[858,2842,2569],{},[639,2844,2845,2848],{},[654,2846,2847],{},"Lire jusqu'à une sentinelle (fin de fichier, mot-clé)",[654,2849,2850],{},[858,2851,2569],{},[599,2853,2854,2855,2860,2861,2863],{},"Règle pratique : ",[603,2856,2857,2858],{},"par défaut, préférer ",[858,2859,881],{},", car le risque de boucle\ninfinie y est nul. N'utiliser ",[858,2862,2569],{}," que lorsque le nombre d'itérations\nn'est pas connu à l'avance.",[594,2865,1437],{"id":1436},[1439,2867,2868],{},[730,2869,2870,2878,2890,2899,2910],{},[733,2871,2872,2873,2875,2876,1895],{},"Confondre ",[858,2874,871],{}," et ",[858,2877,1630],{},[733,2879,2880,2881,2883,2884,898,2886,898,2888,1895],{},"Oublier les ",[858,2882,2366],{}," et l'indentation après ",[858,2885,2170],{},[858,2887,881],{},[858,2889,2569],{},[733,2891,2892,2893,2896,2897,1895],{},"Oublier que ",[858,2894,2895],{},"range(n)"," exclut ",[858,2898,2665],{},[733,2900,2901,2902,2905,2906,2909],{},"Modifier la condition de boucle dans le mauvais sens (ex. ",[858,2903,2904],{},"n = n + 1","\nau lieu de ",[858,2907,2908],{},"n = n - 1"," dans un compte à rebours) → boucle infinie.",[733,2911,2912,2913,1895],{},"Indentation mixte (tabulations + espaces) → erreur ",[858,2914,2915],{},"IndentationError",[594,2917,1462],{"id":1461},[599,2919,2920,2921,2924,2925,2927,2928,1895],{},"Ces cinq constructions — affectation, expression, séquence, conditionnelle,\nboucle — constituent ce qu'on appelle le ",[603,2922,2923],{},"noyau impératif",". C'est exactement\nle corpus pointé par l'item ",[616,2926],{"code":1502}," du programme. Le cours suivant\nintroduit une sixième construction tout aussi fondamentale : la ",[603,2929,2930],{},"fonction",[1474,2932,2933],{},"html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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":856,"searchDepth":878,"depth":878,"links":2935},[2936,2937,2938,2939,2940,2941,2942,2944,2946,2948,2949],{"id":596,"depth":878,"text":597},{"id":1545,"depth":878,"text":1546},{"id":1663,"depth":878,"text":1664},{"id":1866,"depth":878,"text":1867},{"id":2046,"depth":878,"text":2047},{"id":2141,"depth":878,"text":1350},{"id":2383,"depth":878,"text":2943},"Boucles bornées : for",{"id":2565,"depth":878,"text":2945},"Boucles non bornées : while",{"id":2790,"depth":878,"text":2947},"Quand utiliser for, quand utiliser while ?",{"id":1436,"depth":878,"text":1437},{"id":1461,"depth":878,"text":1462},"Variables, types, expressions, instructions, conditionnelles et boucles — le socle commun de la programmation.",{},[2953,2956],{"slug":1844,"kind":1492,"question":2954,"choices":2955,"correct":792,"multi":1494,"explanation":856},"Quel est le type de l'expression 5 \u002F 2 en Python 3 ?",[1695,1713,1731],{"slug":2495,"kind":1492,"question":2957,"choices":2958,"correct":792,"multi":1494,"explanation":856},"Combien de fois la boucle for i in range(3, 8): exécute-t-elle son corps ?",[1257,830,2515,2518],{"title":391,"description":2950},"yxGYMUteRrU2we9XQT11QjrlUqz84bAGWlVLlQJw3D8",{"id":2962,"title":395,"bo":2963,"body":2964,"description":4408,"eval":1487,"extension":1488,"labo":1487,"meta":4409,"navigation":1083,"path":396,"quizzes":4410,"readingTime":863,"seo":4417,"stem":397,"tp":1487,"__hash__":4418},"cours\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F3.fonctions.md",[1502],{"type":591,"value":2965,"toc":4397},[2966,2968,2984,2991,2995,3013,3039,3042,3069,3076,3080,3093,3183,3207,3242,3270,3274,3280,3410,3425,3553,3555,3561,3618,3622,3625,3657,3784,3787,4064,4079,4083,4089,4151,4161,4199,4203,4213,4294,4297,4320,4322,4379,4381,4394],[594,2967,597],{"id":596},[599,2969,2970,2971,2973,2974,2977,2978,2981,2982],{},"Quand un même calcul revient à plusieurs endroits d'un programme, le\ncopier-coller n'est pas la bonne solution : la moindre correction devient\nfastidieuse, et le code devient illisible. La ",[603,2972,2930],{}," est la réponse —\non ",[603,2975,2976],{},"nomme"," un bloc de code et on l'",[603,2979,2980],{},"appelle"," chaque fois qu'on en a\nbesoin. ",[616,2983],{"code":1502},[599,2985,2986,2987,2990],{},"Une fonction est aussi un ",[603,2988,2989],{},"outil de pensée"," : elle donne un nom à une idée,\nisole un calcul de son contexte, et permet de raisonner sur des morceaux\nindépendamment du reste. C'est l'un des piliers de la structuration des\nprogrammes.",[594,2992,2994],{"id":2993},"définir-une-fonction","Définir une fonction",[599,2996,2997,2998,3001,3002,3005,3006,3008,3009,3012],{},"En Python, la définition d'une fonction se fait avec le mot-clé ",[858,2999,3000],{},"def",", suivi\ndu nom de la fonction, de la ",[603,3003,3004],{},"liste de ses paramètres"," entre parenthèses,\npuis d'un ",[858,3007,2366],{}," qui ouvre le bloc indenté du ",[603,3010,3011],{},"corps"," de la fonction.",[850,3014,3016],{"className":852,"code":3015,"language":855,"meta":856,"style":856},"def carre(n):\n    return n * n\n",[858,3017,3018,3028],{"__ignoreMap":856},[771,3019,3020,3022,3025],{"class":862,"line":863},[771,3021,3000],{"class":870},[771,3023,3024],{"class":1022}," carre",[771,3026,3027],{"class":866},"(n):\n",[771,3029,3030,3033,3035,3037],{"class":862,"line":878},[771,3031,3032],{"class":870},"    return",[771,3034,1072],{"class":866},[771,3036,923],{"class":870},[771,3038,1077],{"class":866},[599,3040,3041],{},"Cette fonction :",[730,3043,3044,3051,3060],{},[733,3045,3046,3047,3050],{},"s'appelle ",[858,3048,3049],{},"carre",",",[733,3052,3053,3054,3057,3058,3050],{},"attend ",[603,3055,3056],{},"un paramètre"," nommé ",[858,3059,2665],{},[733,3061,3062,3065,3066,1895],{},[603,3063,3064],{},"retourne"," la valeur ",[858,3067,3068],{},"n * n",[599,3070,3071,3072,3075],{},"Le mot-clé ",[858,3073,3074],{},"return"," termine immédiatement la fonction et renvoie la valeur\nindiquée à l'endroit où la fonction a été appelée.",[594,3077,3079],{"id":3078},"appeler-une-fonction","Appeler une fonction",[599,3081,3082,3085,3086,3089,3090,1895],{},[603,3083,3084],{},"Définir"," une fonction ne l'exécute pas — il faut ensuite l'",[603,3087,3088],{},"appeler"," en\nlui passant des ",[603,3091,3092],{},"arguments",[850,3094,3096],{"className":852,"code":3095,"language":855,"meta":856,"style":856},"def carre(n):\n    return n * n\n\nresultat = carre(5)\nprint(resultat)         # 25\nprint(carre(7))         # 49\nprint(carre(2) + carre(3))  # 4 + 9 = 13\n",[858,3097,3098,3106,3116,3120,3134,3144,3160],{"__ignoreMap":856},[771,3099,3100,3102,3104],{"class":862,"line":863},[771,3101,3000],{"class":870},[771,3103,3024],{"class":1022},[771,3105,3027],{"class":866},[771,3107,3108,3110,3112,3114],{"class":862,"line":878},[771,3109,3032],{"class":870},[771,3111,1072],{"class":866},[771,3113,923],{"class":870},[771,3115,1077],{"class":866},[771,3117,3118],{"class":862,"line":907},[771,3119,1084],{"emptyLinePlaceholder":1083},[771,3121,3122,3125,3127,3130,3132],{"class":862,"line":929},[771,3123,3124],{"class":866},"resultat ",[771,3126,871],{"class":870},[771,3128,3129],{"class":866}," carre(",[771,3131,830],{"class":874},[771,3133,965],{"class":866},[771,3135,3136,3138,3141],{"class":862,"line":1062},[771,3137,932],{"class":874},[771,3139,3140],{"class":866},"(resultat)         ",[771,3142,3143],{"class":938},"# 25\n",[771,3145,3146,3148,3151,3154,3157],{"class":862,"line":1080},[771,3147,932],{"class":874},[771,3149,3150],{"class":866},"(carre(",[771,3152,3153],{"class":874},"7",[771,3155,3156],{"class":866},"))         ",[771,3158,3159],{"class":938},"# 49\n",[771,3161,3162,3164,3166,3169,3171,3173,3175,3177,3180],{"class":862,"line":1087},[771,3163,932],{"class":874},[771,3165,3150],{"class":866},[771,3167,3168],{"class":874},"2",[771,3170,1944],{"class":866},[771,3172,918],{"class":870},[771,3174,3129],{"class":866},[771,3176,1257],{"class":874},[771,3178,3179],{"class":866},"))  ",[771,3181,3182],{"class":938},"# 4 + 9 = 13\n",[599,3184,3185,3186,3189,3190,3192,3193,3195,3196,3199,3200,3203,3204,1895],{},"À l'appel ",[858,3187,3188],{},"carre(5)",", le paramètre ",[858,3191,2665],{}," prend la valeur ",[858,3194,830],{}," le temps de\nl'exécution du corps de la fonction. Le ",[858,3197,3198],{},"return n * n"," renvoie alors ",[858,3201,3202],{},"25",",\nqui est stocké dans la variable ",[858,3205,3206],{},"resultat",[704,3208,3209,3214,3239],{},[599,3210,3211,2218],{},[603,3212,3213],{},"Vocabulaire à fixer",[730,3215,3216,3229],{},[733,3217,3218,3221,3222,3224,3225,3228],{},[603,3219,3220],{},"Paramètre"," : nom déclaré dans la définition (",[858,3223,2665],{}," dans ",[858,3226,3227],{},"def carre(n)",").",[733,3230,3231,3234,3235,3224,3237,3228],{},[603,3232,3233],{},"Argument"," : valeur passée à l'appel (",[858,3236,830],{},[858,3238,3188],{},[599,3240,3241],{},"L'argument est ce qu'on donne ; le paramètre est le nom qu'on utilise à\nl'intérieur de la fonction.",[1137,3243,3245,3257],{"correct":792,"slug":3244},"fonctions-c1",[1141,3246,3247],{"v-slot:question":856},[599,3248,3249,3250,3253,3254,2797],{},"Dans ",[858,3251,3252],{},"def aire(rayon): return 3.14 * rayon * rayon",", comment s'appelle ",[858,3255,3256],{},"rayon",[1141,3258,3259],{"v-slot:choices":856},[730,3260,3261,3264,3267],{},[733,3262,3263],{},"Un argument",[733,3265,3266],{},"Un paramètre",[733,3268,3269],{},"Une valeur de retour",[594,3271,3273],{"id":3272},"plusieurs-paramètres-valeur-de-retour","Plusieurs paramètres, valeur de retour",[599,3275,3276,3277,1895],{},"Une fonction peut avoir ",[603,3278,3279],{},"zéro, un ou plusieurs paramètres",[850,3281,3283],{"className":852,"code":3282,"language":855,"meta":856,"style":856},"def somme(a, b):\n    return a + b\n\ndef saluer(prenom):\n    return \"Bonjour \" + prenom\n\ndef afficher_separateur():\n    print(\"-\" * 20)\n\nprint(somme(3, 4))         # 7\nprint(saluer(\"Ada\"))       # Bonjour Ada\nafficher_separateur()      # --------------------\n",[858,3284,3285,3295,3307,3311,3321,3333,3337,3347,3364,3368,3387,3402],{"__ignoreMap":856},[771,3286,3287,3289,3292],{"class":862,"line":863},[771,3288,3000],{"class":870},[771,3290,3291],{"class":1022}," somme",[771,3293,3294],{"class":866},"(a, b):\n",[771,3296,3297,3299,3302,3304],{"class":862,"line":878},[771,3298,3032],{"class":870},[771,3300,3301],{"class":866}," a ",[771,3303,918],{"class":870},[771,3305,3306],{"class":866}," b\n",[771,3308,3309],{"class":862,"line":907},[771,3310,1084],{"emptyLinePlaceholder":1083},[771,3312,3313,3315,3318],{"class":862,"line":929},[771,3314,3000],{"class":870},[771,3316,3317],{"class":1022}," saluer",[771,3319,3320],{"class":866},"(prenom):\n",[771,3322,3323,3325,3328,3330],{"class":862,"line":1062},[771,3324,3032],{"class":870},[771,3326,3327],{"class":1250}," \"Bonjour \"",[771,3329,2103],{"class":870},[771,3331,3332],{"class":866}," prenom\n",[771,3334,3335],{"class":862,"line":1080},[771,3336,1084],{"emptyLinePlaceholder":1083},[771,3338,3339,3341,3344],{"class":862,"line":1087},[771,3340,3000],{"class":870},[771,3342,3343],{"class":1022}," afficher_separateur",[771,3345,3346],{"class":866},"():\n",[771,3348,3349,3351,3353,3356,3359,3362],{"class":862,"line":1098},[771,3350,2186],{"class":874},[771,3352,893],{"class":866},[771,3354,3355],{"class":1250},"\"-\"",[771,3357,3358],{"class":870}," *",[771,3360,3361],{"class":874}," 20",[771,3363,965],{"class":866},[771,3365,3366],{"class":862,"line":1119},[771,3367,1084],{"emptyLinePlaceholder":1083},[771,3369,3370,3372,3375,3377,3379,3382,3384],{"class":862,"line":1125},[771,3371,932],{"class":874},[771,3373,3374],{"class":866},"(somme(",[771,3376,1257],{"class":874},[771,3378,898],{"class":866},[771,3380,3381],{"class":874},"4",[771,3383,3156],{"class":866},[771,3385,3386],{"class":938},"# 7\n",[771,3388,3389,3391,3394,3396,3399],{"class":862,"line":2326},[771,3390,932],{"class":874},[771,3392,3393],{"class":866},"(saluer(",[771,3395,1818],{"class":1250},[771,3397,3398],{"class":866},"))       ",[771,3400,3401],{"class":938},"# Bonjour Ada\n",[771,3403,3404,3407],{"class":862,"line":2333},[771,3405,3406],{"class":866},"afficher_separateur()      ",[771,3408,3409],{"class":938},"# --------------------\n",[599,3411,3412,1901,3415,3418,3419,3421,3422,1895],{},[858,3413,3414],{},"afficher_separateur",[603,3416,3417],{},"ne retourne rien d'utile"," : elle a un effet de bord\n(elle affiche) mais pas de valeur de retour explicite. En Python, une\nfonction sans ",[858,3420,3074],{}," renvoie automatiquement la valeur spéciale ",[858,3423,3424],{},"None",[1223,3426,3427],{},[850,3428,3430],{"className":852,"code":3429,"language":855,"meta":856,"style":856},"def somme(a, b):\n    return a + b\n\ndef maximum(a, b):\n    if a > b:\n        return a\n    return b\n\nprint(\"Somme   :\", somme(3, 4))\nprint(\"Maximum :\", maximum(7, 2))\nprint(\"Maximum :\", maximum(2, 9))\n",[858,3431,3432,3440,3450,3454,3463,3475,3483,3489,3493,3514,3534],{"__ignoreMap":856},[771,3433,3434,3436,3438],{"class":862,"line":863},[771,3435,3000],{"class":870},[771,3437,3291],{"class":1022},[771,3439,3294],{"class":866},[771,3441,3442,3444,3446,3448],{"class":862,"line":878},[771,3443,3032],{"class":870},[771,3445,3301],{"class":866},[771,3447,918],{"class":870},[771,3449,3306],{"class":866},[771,3451,3452],{"class":862,"line":907},[771,3453,1084],{"emptyLinePlaceholder":1083},[771,3455,3456,3458,3461],{"class":862,"line":929},[771,3457,3000],{"class":870},[771,3459,3460],{"class":1022}," maximum",[771,3462,3294],{"class":866},[771,3464,3465,3468,3470,3472],{"class":862,"line":1062},[771,3466,3467],{"class":870},"    if",[771,3469,3301],{"class":866},[771,3471,2026],{"class":870},[771,3473,3474],{"class":866}," b:\n",[771,3476,3477,3480],{"class":862,"line":1080},[771,3478,3479],{"class":870},"        return",[771,3481,3482],{"class":866}," a\n",[771,3484,3485,3487],{"class":862,"line":1087},[771,3486,3032],{"class":870},[771,3488,3306],{"class":866},[771,3490,3491],{"class":862,"line":1098},[771,3492,1084],{"emptyLinePlaceholder":1083},[771,3494,3495,3497,3499,3502,3505,3507,3509,3511],{"class":862,"line":1119},[771,3496,932],{"class":874},[771,3498,893],{"class":866},[771,3500,3501],{"class":1250},"\"Somme   :\"",[771,3503,3504],{"class":866},", somme(",[771,3506,1257],{"class":874},[771,3508,898],{"class":866},[771,3510,3381],{"class":874},[771,3512,3513],{"class":866},"))\n",[771,3515,3516,3518,3520,3523,3526,3528,3530,3532],{"class":862,"line":1125},[771,3517,932],{"class":874},[771,3519,893],{"class":866},[771,3521,3522],{"class":1250},"\"Maximum :\"",[771,3524,3525],{"class":866},", maximum(",[771,3527,3153],{"class":874},[771,3529,898],{"class":866},[771,3531,3168],{"class":874},[771,3533,3513],{"class":866},[771,3535,3536,3538,3540,3542,3544,3546,3548,3551],{"class":862,"line":2326},[771,3537,932],{"class":874},[771,3539,893],{"class":866},[771,3541,3522],{"class":1250},[771,3543,3525],{"class":866},[771,3545,3168],{"class":874},[771,3547,898],{"class":866},[771,3549,3550],{"class":874},"9",[771,3552,3513],{"class":866},[599,3554,2037],{},[850,3556,3559],{"className":3557,"code":3558,"language":1281},[1279],"Somme   : 7\nMaximum : 7\nMaximum : 9\n",[858,3560,3558],{"__ignoreMap":856},[3562,3563,3564,3579],"tip",{},[599,3565,3566,3567,3569,3570,3573,3574,3576,3577,2218],{},"Quand un ",[858,3568,3074],{}," est exécuté, ",[603,3571,3572],{},"la fonction s'arrête immédiatement",".\nInutile d'écrire un ",[858,3575,2198],{}," après un ",[858,3578,3074],{},[850,3580,3582],{"className":852,"code":3581,"language":855,"meta":856,"style":856},"def maximum(a, b):\n    if a > b:\n        return a\n    return b   # exécuté uniquement si a \u003C= b\n",[858,3583,3584,3592,3602,3608],{"__ignoreMap":856},[771,3585,3586,3588,3590],{"class":862,"line":863},[771,3587,3000],{"class":870},[771,3589,3460],{"class":1022},[771,3591,3294],{"class":866},[771,3593,3594,3596,3598,3600],{"class":862,"line":878},[771,3595,3467],{"class":870},[771,3597,3301],{"class":866},[771,3599,2026],{"class":870},[771,3601,3474],{"class":866},[771,3603,3604,3606],{"class":862,"line":907},[771,3605,3479],{"class":870},[771,3607,3482],{"class":866},[771,3609,3610,3612,3615],{"class":862,"line":929},[771,3611,3032],{"class":870},[771,3613,3614],{"class":866}," b   ",[771,3616,3617],{"class":938},"# exécuté uniquement si a \u003C= b\n",[594,3619,3621],{"id":3620},"pourquoi-écrire-des-fonctions","Pourquoi écrire des fonctions ?",[599,3623,3624],{},"Trois bénéfices majeurs :",[3626,3627,3628,3634,3651],"ol",{},[733,3629,3630,3633],{},[603,3631,3632],{},"Réutiliser"," : écrire une fois, appeler partout.",[733,3635,3636,3639,3640,898,3643,3646,3647,3650],{},[603,3637,3638],{},"Nommer"," : donner un nom au calcul (",[858,3641,3642],{},"distance",[858,3644,3645],{},"est_premier",",\n",[858,3648,3649],{},"convertir_en_celsius","…) rend le code parlant.",[733,3652,3653,3656],{},[603,3654,3655],{},"Isoler"," : ce qui se passe à l'intérieur de la fonction ne pollue pas\nl'extérieur. On peut tester la fonction seule.",[704,3658,3659],{},[599,3660,3661,1209,3666,3668,3669,3671,3672,3674,3675,3678,3679,1895],{},[603,3662,3663,1208],{},[858,3664,3665],{},"import math",[858,3667,1212],{}," (utiliser une\nbibliothèque) sera détaillé au ",[603,3670,1216],{},". Ici, retenez\nseulement que ",[858,3673,780],{}," est une bibliothèque standard et que ",[858,3676,3677],{},"math.sqrt(x)","\ncalcule ",[771,3680,3682,3701],{"className":3681},[774],[771,3683,3685],{"className":3684},[778],[780,3686,3687],{"xmlns":782},[784,3688,3689,3698],{},[787,3690,3691],{},[3692,3693,3694],"msqrt",{},[3695,3696,3697],"mi",{},"x",[794,3699,3700],{"encoding":796},"\\sqrt{x}",[771,3702,3704],{"className":3703,"ariaHidden":801},[800],[771,3705,3707,3711],{"className":3706},[805],[771,3708],{"className":3709,"style":3710},[809],"height:1.04em;vertical-align:-0.2397em;",[771,3712,3715],{"className":3713},[814,3714],"sqrt",[771,3716,3720,3775],{"className":3717},[3718,3719],"vlist-t","vlist-t2",[771,3721,3724,3770],{"className":3722},[3723],"vlist-r",[771,3725,3729,3747],{"className":3726,"style":3728},[3727],"vlist","height:0.8003em;",[771,3730,3734,3739],{"className":3731,"style":3733},[3732],"svg-align","top:-3em;",[771,3735],{"className":3736,"style":3738},[3737],"pstrut","height:3em;",[771,3740,3743],{"className":3741,"style":3742},[814],"padding-left:0.833em;",[771,3744,3697],{"className":3745},[814,3746],"mathnormal",[771,3748,3750,3753],{"style":3749},"top:-2.7603em;",[771,3751],{"className":3752,"style":3738},[3737],[771,3754,3758],{"className":3755,"style":3757},[3756],"hide-tail","min-width:0.853em;height:1.08em;",[3759,3760,3766],"svg",{"xmlns":3761,"width":3762,"height":3763,"viewBox":3764,"preserveAspectRatio":3765},"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg","400em","1.08em","0 0 400000 1080","xMinYMin slice",[3767,3768],"path",{"d":3769},"M95,702\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl0 -0\nc5.3,-9.3,12,-14,20,-14\nH400000v40H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM834 80h400000v40h-400000z",[771,3771,3774],{"className":3772},[3773],"vlist-s","​",[771,3776,3778],{"className":3777},[3723],[771,3779,3782],{"className":3780,"style":3781},[3727],"height:0.2397em;",[771,3783],{},[599,3785,3786],{},"Comparez :",[847,3788,3789,3950],{},[850,3790,3793],{"className":852,"code":3791,"filename":3792,"language":855,"meta":856,"style":856},"# Calculer plusieurs distances entre points 2D\nimport math\nx1, y1 = 0, 0\nx2, y2 = 3, 4\nd1 = math.sqrt((x2-x1)**2 + (y2-y1)**2)\n\nx3, y3 = 1, 1\nx4, y4 = 4, 5\nd2 = math.sqrt((x4-x3)**2 + (y4-y3)**2)\n\nprint(d1, d2)\n","sans-fonction.py",[858,3794,3795,3800,3807,3821,3835,3871,3875,3889,3904,3939,3943],{"__ignoreMap":856},[771,3796,3797],{"class":862,"line":863},[771,3798,3799],{"class":938},"# Calculer plusieurs distances entre points 2D\n",[771,3801,3802,3804],{"class":862,"line":878},[771,3803,1212],{"class":870},[771,3805,3806],{"class":866}," math\n",[771,3808,3809,3812,3814,3816,3818],{"class":862,"line":907},[771,3810,3811],{"class":866},"x1, y1 ",[771,3813,871],{"class":870},[771,3815,2610],{"class":874},[771,3817,898],{"class":866},[771,3819,3820],{"class":874},"0\n",[771,3822,3823,3826,3828,3830,3832],{"class":862,"line":929},[771,3824,3825],{"class":866},"x2, y2 ",[771,3827,871],{"class":870},[771,3829,1990],{"class":874},[771,3831,898],{"class":866},[771,3833,3834],{"class":874},"4\n",[771,3836,3837,3840,3842,3845,3847,3850,3853,3855,3857,3860,3862,3865,3867,3869],{"class":862,"line":1062},[771,3838,3839],{"class":866},"d1 ",[771,3841,871],{"class":870},[771,3843,3844],{"class":866}," math.sqrt((x2",[771,3846,2631],{"class":870},[771,3848,3849],{"class":866},"x1)",[771,3851,3852],{"class":870},"**",[771,3854,3168],{"class":874},[771,3856,2103],{"class":870},[771,3858,3859],{"class":866}," (y2",[771,3861,2631],{"class":870},[771,3863,3864],{"class":866},"y1)",[771,3866,3852],{"class":870},[771,3868,3168],{"class":874},[771,3870,965],{"class":866},[771,3872,3873],{"class":862,"line":1080},[771,3874,1084],{"emptyLinePlaceholder":1083},[771,3876,3877,3880,3882,3884,3886],{"class":862,"line":1087},[771,3878,3879],{"class":866},"x3, y3 ",[771,3881,871],{"class":870},[771,3883,1589],{"class":874},[771,3885,898],{"class":866},[771,3887,3888],{"class":874},"1\n",[771,3890,3891,3894,3896,3899,3901],{"class":862,"line":1098},[771,3892,3893],{"class":866},"x4, y4 ",[771,3895,871],{"class":870},[771,3897,3898],{"class":874}," 4",[771,3900,898],{"class":866},[771,3902,3903],{"class":874},"5\n",[771,3905,3906,3909,3911,3914,3916,3919,3921,3923,3925,3928,3930,3933,3935,3937],{"class":862,"line":1119},[771,3907,3908],{"class":866},"d2 ",[771,3910,871],{"class":870},[771,3912,3913],{"class":866}," math.sqrt((x4",[771,3915,2631],{"class":870},[771,3917,3918],{"class":866},"x3)",[771,3920,3852],{"class":870},[771,3922,3168],{"class":874},[771,3924,2103],{"class":870},[771,3926,3927],{"class":866}," (y4",[771,3929,2631],{"class":870},[771,3931,3932],{"class":866},"y3)",[771,3934,3852],{"class":870},[771,3936,3168],{"class":874},[771,3938,965],{"class":866},[771,3940,3941],{"class":862,"line":1125},[771,3942,1084],{"emptyLinePlaceholder":1083},[771,3944,3945,3947],{"class":862,"line":2326},[771,3946,932],{"class":874},[771,3948,3949],{"class":866},"(d1, d2)\n",[850,3951,3954],{"className":852,"code":3952,"filename":3953,"language":855,"meta":856,"style":856},"import math\n\ndef distance(x1, y1, x2, y2):\n    return math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)\n\nprint(distance(0, 0, 3, 4))   # 5.0\nprint(distance(1, 1, 4, 5))   # 5.0\n","avec-fonction.py",[858,3955,3956,3962,3966,3976,4008,4012,4040],{"__ignoreMap":856},[771,3957,3958,3960],{"class":862,"line":863},[771,3959,1212],{"class":870},[771,3961,3806],{"class":866},[771,3963,3964],{"class":862,"line":878},[771,3965,1084],{"emptyLinePlaceholder":1083},[771,3967,3968,3970,3973],{"class":862,"line":907},[771,3969,3000],{"class":870},[771,3971,3972],{"class":1022}," distance",[771,3974,3975],{"class":866},"(x1, y1, x2, y2):\n",[771,3977,3978,3980,3983,3985,3988,3990,3992,3994,3997,3999,4002,4004,4006],{"class":862,"line":929},[771,3979,3032],{"class":870},[771,3981,3982],{"class":866}," math.sqrt((x2 ",[771,3984,2631],{"class":870},[771,3986,3987],{"class":866}," x1) ",[771,3989,3852],{"class":870},[771,3991,1949],{"class":874},[771,3993,2103],{"class":870},[771,3995,3996],{"class":866}," (y2 ",[771,3998,2631],{"class":870},[771,4000,4001],{"class":866}," y1) ",[771,4003,3852],{"class":870},[771,4005,1949],{"class":874},[771,4007,965],{"class":866},[771,4009,4010],{"class":862,"line":1062},[771,4011,1084],{"emptyLinePlaceholder":1083},[771,4013,4014,4016,4019,4022,4024,4026,4028,4030,4032,4034,4037],{"class":862,"line":1080},[771,4015,932],{"class":874},[771,4017,4018],{"class":866},"(distance(",[771,4020,4021],{"class":874},"0",[771,4023,898],{"class":866},[771,4025,4021],{"class":874},[771,4027,898],{"class":866},[771,4029,1257],{"class":874},[771,4031,898],{"class":866},[771,4033,3381],{"class":874},[771,4035,4036],{"class":866},"))   ",[771,4038,4039],{"class":938},"# 5.0\n",[771,4041,4042,4044,4046,4048,4050,4052,4054,4056,4058,4060,4062],{"class":862,"line":1087},[771,4043,932],{"class":874},[771,4045,4018],{"class":866},[771,4047,792],{"class":874},[771,4049,898],{"class":866},[771,4051,792],{"class":874},[771,4053,898],{"class":866},[771,4055,3381],{"class":874},[771,4057,898],{"class":866},[771,4059,830],{"class":874},[771,4061,4036],{"class":866},[771,4063,4039],{"class":938},[599,4065,4066,4067,4070,4071,4074,4075,4078],{},"La version avec fonction est plus ",[603,4068,4069],{},"courte",", plus ",[603,4072,4073],{},"lisible",", et la formule\nest écrite ",[603,4076,4077],{},"une seule fois"," — donc moins d'occasions de se tromper.",[594,4080,4082],{"id":4081},"portée-des-variables-notion","Portée des variables (notion)",[599,4084,4085,4086,1895],{},"Les variables définies à l'intérieur d'une fonction (paramètres ou variables\nlocales) ",[603,4087,4088],{},"n'existent que pendant l'exécution de la fonction",[850,4090,4092],{"className":852,"code":4091,"language":855,"meta":856,"style":856},"def double(n):\n    resultat = n * 2\n    return resultat\n\nprint(double(5))      # 10\nprint(resultat)       # NameError : resultat n'existe pas ici\n",[858,4093,4094,4103,4116,4123,4127,4141],{"__ignoreMap":856},[771,4095,4096,4098,4101],{"class":862,"line":863},[771,4097,3000],{"class":870},[771,4099,4100],{"class":1022}," double",[771,4102,3027],{"class":866},[771,4104,4105,4108,4110,4112,4114],{"class":862,"line":878},[771,4106,4107],{"class":866},"    resultat ",[771,4109,871],{"class":870},[771,4111,1072],{"class":866},[771,4113,923],{"class":870},[771,4115,2733],{"class":874},[771,4117,4118,4120],{"class":862,"line":907},[771,4119,3032],{"class":870},[771,4121,4122],{"class":866}," resultat\n",[771,4124,4125],{"class":862,"line":929},[771,4126,1084],{"emptyLinePlaceholder":1083},[771,4128,4129,4131,4134,4136,4138],{"class":862,"line":1062},[771,4130,932],{"class":874},[771,4132,4133],{"class":866},"(double(",[771,4135,830],{"class":874},[771,4137,1802],{"class":866},[771,4139,4140],{"class":938},"# 10\n",[771,4142,4143,4145,4148],{"class":862,"line":1080},[771,4144,932],{"class":874},[771,4146,4147],{"class":866},"(resultat)       ",[771,4149,4150],{"class":938},"# NameError : resultat n'existe pas ici\n",[599,4152,4153,4154,4157,4158,1895],{},"À l'inverse, une fonction peut ",[603,4155,4156],{},"lire"," une variable définie à l'extérieur,\nmais ce n'est pas une bonne pratique — on préfère ",[603,4159,4160],{},"passer toutes les\ndonnées nécessaires en paramètres",[1439,4162,4163,4170],{},[599,4164,4165,4166,4169],{},"Évitez de modifier une variable globale à l'intérieur d'une fonction (mot-clé\n",[858,4167,4168],{},"global","). Cela rend le code imprévisible. Préférez toujours :",[850,4171,4173],{"className":852,"code":4172,"language":855,"meta":856,"style":856},"def f(x):\n    return x + 1   # transforme et retourne, sans toucher à l'extérieur\n",[858,4174,4175,4185],{"__ignoreMap":856},[771,4176,4177,4179,4182],{"class":862,"line":863},[771,4178,3000],{"class":870},[771,4180,4181],{"class":1022}," f",[771,4183,4184],{"class":866},"(x):\n",[771,4186,4187,4189,4192,4194,4196],{"class":862,"line":878},[771,4188,3032],{"class":870},[771,4190,4191],{"class":866}," x ",[771,4193,918],{"class":870},[771,4195,1589],{"class":874},[771,4197,4198],{"class":938},"   # transforme et retourne, sans toucher à l'extérieur\n",[594,4200,4202],{"id":4201},"plusieurs-valeurs-de-retour","Plusieurs valeurs de retour",[599,4204,4205,4206,4209,4210,1895],{},"Une fonction peut ",[603,4207,4208],{},"renvoyer un tuple"," (une suite figée de valeurs) pour\ntransmettre plusieurs résultats à la fois ; la notion de tuple sera étudiée\nen détail au chapitre ",[603,4211,4212],{},"PC — Types construits",[850,4214,4216],{"className":852,"code":4215,"language":855,"meta":856,"style":856},"def division_euclidienne(a, b):\n    quotient = a \u002F\u002F b\n    reste = a % b\n    return quotient, reste\n\nq, r = division_euclidienne(17, 5)\nprint(q, r)        # 3 2\n",[858,4217,4218,4227,4241,4254,4261,4265,4284],{"__ignoreMap":856},[771,4219,4220,4222,4225],{"class":862,"line":863},[771,4221,3000],{"class":870},[771,4223,4224],{"class":1022}," division_euclidienne",[771,4226,3294],{"class":866},[771,4228,4229,4232,4234,4236,4239],{"class":862,"line":878},[771,4230,4231],{"class":866},"    quotient ",[771,4233,871],{"class":870},[771,4235,3301],{"class":866},[771,4237,4238],{"class":870},"\u002F\u002F",[771,4240,3306],{"class":866},[771,4242,4243,4246,4248,4250,4252],{"class":862,"line":907},[771,4244,4245],{"class":866},"    reste ",[771,4247,871],{"class":870},[771,4249,3301],{"class":866},[771,4251,2709],{"class":870},[771,4253,3306],{"class":866},[771,4255,4256,4258],{"class":862,"line":929},[771,4257,3032],{"class":870},[771,4259,4260],{"class":866}," quotient, reste\n",[771,4262,4263],{"class":862,"line":1062},[771,4264,1084],{"emptyLinePlaceholder":1083},[771,4266,4267,4270,4272,4275,4278,4280,4282],{"class":862,"line":1080},[771,4268,4269],{"class":866},"q, r ",[771,4271,871],{"class":870},[771,4273,4274],{"class":866}," division_euclidienne(",[771,4276,4277],{"class":874},"17",[771,4279,898],{"class":866},[771,4281,830],{"class":874},[771,4283,965],{"class":866},[771,4285,4286,4288,4291],{"class":862,"line":1087},[771,4287,932],{"class":874},[771,4289,4290],{"class":866},"(q, r)        ",[771,4292,4293],{"class":938},"# 3 2\n",[599,4295,4296],{},"Cette syntaxe sert souvent pour les fonctions qui renvoient un couple\nnaturel : (min, max), (succès, valeur), (quotient, reste).",[1137,4298,4300,4307],{"correct":792,"slug":4299},"fonctions-c2",[1141,4301,4302],{"v-slot:question":856},[599,4303,4304,4305,2797],{},"Que retourne une fonction Python qui ne contient pas de ",[858,4306,3074],{},[1141,4308,4309],{"v-slot:choices":856},[730,4310,4311,4314,4317],{},[733,4312,4313],{},"Rien du tout",[733,4315,4316],{},"La valeur None",[733,4318,4319],{},"La dernière variable affectée",[594,4321,1437],{"id":1436},[1439,4323,4324],{},[730,4325,4326,4339,4358,4373],{},[733,4327,4328,4331,4332,4335,4336,4338],{},[603,4329,4330],{},"Définir vs appeler"," : ",[858,4333,4334],{},"def carre(n): return n*n"," ne calcule rien tant\nqu'on n'écrit pas ",[858,4337,3188],{}," quelque part.",[733,4340,4341,4346,4347,4349,4350,4353,4354,3224,4356,1895],{},[603,4342,4343,4344],{},"Oublier ",[858,4345,3074],{}," : la fonction renvoie alors ",[858,4348,3424],{},", et un code du\ntype ",[858,4351,4352],{},"x = ma_fonction()"," met ",[858,4355,3424],{},[858,4357,3697],{},[733,4359,4360,4331,4367,4369,4370,4372],{},[603,4361,4362,4363,2875,4365],{},"Mélanger ",[858,4364,932],{},[858,4366,3074],{},[858,4368,932],{}," affiche, ",[858,4371,3074],{}," renvoie. Ce\nn'est pas la même chose. Une fonction utilitaire retourne plutôt que\nd'afficher.",[733,4374,4375,4378],{},[603,4376,4377],{},"Variables locales hors de portée"," : on ne peut pas lire à l'extérieur\nd'une fonction une variable créée à l'intérieur.",[594,4380,1462],{"id":1461},[599,4382,4383,4384,4387,4388,1901,4391,1895],{},"Une fonction bien écrite, c'est ",[603,4385,4386],{},"une fonction spécifiée"," : on sait ce\nqu'elle attend en entrée et ce qu'elle promet en sortie. C'est l'objet du\ncours suivant sur la ",[603,4389,4390],{},"spécification",[616,4392],{"code":4393},"PG04",[1474,4395,4396],{},"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 .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 .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":856,"searchDepth":878,"depth":878,"links":4398},[4399,4400,4401,4402,4403,4404,4405,4406,4407],{"id":596,"depth":878,"text":597},{"id":2993,"depth":878,"text":2994},{"id":3078,"depth":878,"text":3079},{"id":3272,"depth":878,"text":3273},{"id":3620,"depth":878,"text":3621},{"id":4081,"depth":878,"text":4082},{"id":4201,"depth":878,"text":4202},{"id":1436,"depth":878,"text":1437},{"id":1461,"depth":878,"text":1462},"Définition, appel, paramètres et valeur de retour — découper un programme en blocs réutilisables.",{},[4411,4414],{"slug":3244,"kind":1492,"question":4412,"choices":4413,"correct":792,"multi":1494,"explanation":856},"Dans def aire(rayon): return 3.14 * rayon * rayon, comment s'appelle rayon ?",[3263,3266,3269],{"slug":4299,"kind":1492,"question":4415,"choices":4416,"correct":792,"multi":1494,"explanation":856},"Que retourne une fonction Python qui ne contient pas de return ?",[4313,4316,4319],{"title":395,"description":4408},"1CGR5hT_d23AjLre5NvpqkpXqltj-kSXkeImDWKJ-T4",{"id":4420,"title":399,"bo":4421,"body":4422,"description":5343,"eval":1487,"extension":1488,"labo":1487,"meta":5344,"navigation":1083,"path":400,"quizzes":5345,"readingTime":863,"seo":5350,"stem":401,"tp":1487,"__hash__":5351},"cours\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F4.specification.md",[4393],{"type":591,"value":4423,"toc":5331},[4424,4426,4445,4448,4452,4466,4507,4524,4565,4569,4586,4592,4620,4627,4631,4644,4736,4750,4815,4818,4824,4845,4852,4863,4936,4943,4978,5003,5007,5010,5158,5161,5197,5209,5213,5245,5266,5268,5313,5315,5328],[594,4425,597],{"id":596},[599,4427,4428,4429,2875,4432,4435,4436,4438,4439,4442,4443],{},"Une fonction n'est pleinement utilisable que si on sait ",[603,4430,4431],{},"ce qu'elle attend\nen entrée",[603,4433,4434],{},"ce qu'elle garantit en sortie",". Cette description s'appelle\nla ",[603,4437,4390],{},". Elle s'écrit ",[603,4440,4441],{},"avant"," le code — c'est ce qui permet\nà un autre programmeur (ou à vous dans trois semaines) d'utiliser la fonction\nsans lire son corps. ",[616,4444],{"code":4393},[599,4446,4447],{},"Une fonction sans spécification, c'est comme une recette de cuisine sans\nliste d'ingrédients : on peut la lire, on ne sait pas si elle va marcher.",[594,4449,4451],{"id":4450},"signature-et-prototype","Signature et prototype",[599,4453,4454,4455,4458,4459,4462,4463,2218],{},"La ",[603,4456,4457],{},"signature"," (ou ",[603,4460,4461],{},"prototype",") d'une fonction décrit son nom, ses\nparamètres et le type de chacun. En Python, on l'exprime avec des\n",[603,4464,4465],{},"annotations de type",[850,4467,4469],{"className":852,"code":4468,"language":855,"meta":856,"style":856},"def aire_rectangle(longueur: float, largeur: float) -> float:\n    return longueur * largeur\n",[858,4470,4471,4495],{"__ignoreMap":856},[771,4472,4473,4475,4478,4481,4483,4486,4488,4491,4493],{"class":862,"line":863},[771,4474,3000],{"class":870},[771,4476,4477],{"class":1022}," aire_rectangle",[771,4479,4480],{"class":866},"(longueur: ",[771,4482,1713],{"class":874},[771,4484,4485],{"class":866},", largeur: ",[771,4487,1713],{"class":874},[771,4489,4490],{"class":866},") -> ",[771,4492,1713],{"class":874},[771,4494,1026],{"class":866},[771,4496,4497,4499,4502,4504],{"class":862,"line":878},[771,4498,3032],{"class":870},[771,4500,4501],{"class":866}," longueur ",[771,4503,923],{"class":870},[771,4505,4506],{"class":866}," largeur\n",[730,4508,4509,4518],{},[733,4510,4511,2875,4514,4517],{},[858,4512,4513],{},"longueur: float",[858,4515,4516],{},"largeur: float"," annoncent que les paramètres sont\ndes nombres à virgule.",[733,4519,4520,4523],{},[858,4521,4522],{},"-> float"," annonce que la fonction retourne un nombre à virgule.",[704,4525,4526,4535,4558],{},[599,4527,4528,4531,4532,4534],{},[603,4529,4530],{},"Les annotations ne sont pas contraignantes"," en Python. Le code suivant\nne lèvera aucune erreur même si on passe une chaîne là où un ",[858,4533,1713],{}," est\nattendu :",[850,4536,4538],{"className":852,"code":4537,"language":855,"meta":856,"style":856},"aire_rectangle(\"trois\", \"quatre\")   # plante au runtime, pas à cause des annotations\n",[858,4539,4540],{"__ignoreMap":856},[771,4541,4542,4545,4548,4550,4553,4555],{"class":862,"line":863},[771,4543,4544],{"class":866},"aire_rectangle(",[771,4546,4547],{"class":1250},"\"trois\"",[771,4549,898],{"class":866},[771,4551,4552],{"class":1250},"\"quatre\"",[771,4554,2031],{"class":866},[771,4556,4557],{"class":938},"# plante au runtime, pas à cause des annotations\n",[599,4559,4560,4561,4564],{},"Elles servent à ",[603,4562,4563],{},"documenter"," et à aider les outils d'analyse (linters,\néditeurs). C'est une convention de lisibilité, pas une vérification.",[594,4566,4568],{"id":4567},"précondition-et-postcondition","Précondition et postcondition",[730,4570,4571,4577],{},[733,4572,1549,4573,4576],{},[603,4574,4575],{},"précondition"," est une condition que les arguments doivent\nsatisfaire pour que la fonction fonctionne correctement.",[733,4578,1549,4579,4582,4583,1895],{},[603,4580,4581],{},"postcondition"," est ce que la fonction garantit en sortie, ",[603,4584,4585],{},"si la\nprécondition est respectée",[599,4587,4588,4589,1895],{},"Exemple : une fonction ",[858,4590,4591],{},"racine_carree(x)",[730,4593,4594,4603],{},[733,4595,4596,4331,4599,4602],{},[603,4597,4598],{},"Précondition",[858,4600,4601],{},"x >= 0",". (On ne sait pas calculer la racine carrée\nd'un nombre négatif en restant dans les réels.)",[733,4604,4605,4608,4609,4612,4613,2875,4616,4619],{},[603,4606,4607],{},"Postcondition"," : le résultat ",[858,4610,4611],{},"r"," satisfait ",[858,4614,4615],{},"r >= 0",[858,4617,4618],{},"r * r == x","\n(à l'erreur d'arrondi près).",[599,4621,4622,4623,4626],{},"C'est un ",[603,4624,4625],{},"contrat"," : si vous respectez la précondition, je m'engage sur\nla postcondition.",[594,4628,4630],{"id":4629},"la-docstring-la-spécification-en-mots","La docstring : la spécification en mots",[599,4632,4633,4634,4637,4638,4640,4641,1895],{},"En Python, la spécification d'une fonction s'écrit dans une ",[603,4635,4636],{},"docstring"," —\nune chaîne de caractères placée juste après la ligne ",[858,4639,3000],{},", encadrée par\ntrois guillemets ",[858,4642,4643],{},"\"\"\"",[850,4645,4647],{"className":852,"code":4646,"language":855,"meta":856,"style":856},"def aire_rectangle(longueur: float, largeur: float) -> float:\n    \"\"\"Renvoie l'aire d'un rectangle.\n\n    Paramètres :\n    - longueur : longueur du rectangle, doit être >= 0.\n    - largeur  : largeur du rectangle, doit être >= 0.\n\n    Retourne :\n    - L'aire en unités², toujours >= 0.\n\n    Précondition  : longueur >= 0 et largeur >= 0.\n    Postcondition : résultat >= 0.\n    \"\"\"\n    return longueur * largeur\n",[858,4648,4649,4669,4674,4678,4683,4688,4693,4697,4702,4707,4711,4716,4721,4726],{"__ignoreMap":856},[771,4650,4651,4653,4655,4657,4659,4661,4663,4665,4667],{"class":862,"line":863},[771,4652,3000],{"class":870},[771,4654,4477],{"class":1022},[771,4656,4480],{"class":866},[771,4658,1713],{"class":874},[771,4660,4485],{"class":866},[771,4662,1713],{"class":874},[771,4664,4490],{"class":866},[771,4666,1713],{"class":874},[771,4668,1026],{"class":866},[771,4670,4671],{"class":862,"line":878},[771,4672,4673],{"class":1250},"    \"\"\"Renvoie l'aire d'un rectangle.\n",[771,4675,4676],{"class":862,"line":907},[771,4677,1084],{"emptyLinePlaceholder":1083},[771,4679,4680],{"class":862,"line":929},[771,4681,4682],{"class":1250},"    Paramètres :\n",[771,4684,4685],{"class":862,"line":1062},[771,4686,4687],{"class":1250},"    - longueur : longueur du rectangle, doit être >= 0.\n",[771,4689,4690],{"class":862,"line":1080},[771,4691,4692],{"class":1250},"    - largeur  : largeur du rectangle, doit être >= 0.\n",[771,4694,4695],{"class":862,"line":1087},[771,4696,1084],{"emptyLinePlaceholder":1083},[771,4698,4699],{"class":862,"line":1098},[771,4700,4701],{"class":1250},"    Retourne :\n",[771,4703,4704],{"class":862,"line":1119},[771,4705,4706],{"class":1250},"    - L'aire en unités², toujours >= 0.\n",[771,4708,4709],{"class":862,"line":1125},[771,4710,1084],{"emptyLinePlaceholder":1083},[771,4712,4713],{"class":862,"line":2326},[771,4714,4715],{"class":1250},"    Précondition  : longueur >= 0 et largeur >= 0.\n",[771,4717,4718],{"class":862,"line":2333},[771,4719,4720],{"class":1250},"    Postcondition : résultat >= 0.\n",[771,4722,4723],{"class":862,"line":2343},[771,4724,4725],{"class":1250},"    \"\"\"\n",[771,4727,4728,4730,4732,4734],{"class":862,"line":2348},[771,4729,3032],{"class":870},[771,4731,4501],{"class":866},[771,4733,923],{"class":870},[771,4735,4506],{"class":866},[599,4737,4738,4739,4742,4743,4746,4747,2218],{},"La docstring est accessible ",[603,4740,4741],{},"depuis l'extérieur"," grâce à l'attribut\n",[858,4744,4745],{},"__doc__"," ou à la fonction ",[858,4748,4749],{},"help()",[1223,4751,4752],{},[850,4753,4755],{"className":852,"code":4754,"language":855,"meta":856,"style":856},"def aire_rectangle(longueur: float, largeur: float) -> float:\n    \"\"\"Renvoie l'aire d'un rectangle de longueur et largeur positives.\"\"\"\n    return longueur * largeur\n\nprint(aire_rectangle.__doc__)\nhelp(aire_rectangle)\n",[858,4756,4757,4777,4782,4792,4796,4807],{"__ignoreMap":856},[771,4758,4759,4761,4763,4765,4767,4769,4771,4773,4775],{"class":862,"line":863},[771,4760,3000],{"class":870},[771,4762,4477],{"class":1022},[771,4764,4480],{"class":866},[771,4766,1713],{"class":874},[771,4768,4485],{"class":866},[771,4770,1713],{"class":874},[771,4772,4490],{"class":866},[771,4774,1713],{"class":874},[771,4776,1026],{"class":866},[771,4778,4779],{"class":862,"line":878},[771,4780,4781],{"class":1250},"    \"\"\"Renvoie l'aire d'un rectangle de longueur et largeur positives.\"\"\"\n",[771,4783,4784,4786,4788,4790],{"class":862,"line":907},[771,4785,3032],{"class":870},[771,4787,4501],{"class":866},[771,4789,923],{"class":870},[771,4791,4506],{"class":866},[771,4793,4794],{"class":862,"line":929},[771,4795,1084],{"emptyLinePlaceholder":1083},[771,4797,4798,4800,4803,4805],{"class":862,"line":1062},[771,4799,932],{"class":874},[771,4801,4802],{"class":866},"(aire_rectangle.",[771,4804,4745],{"class":874},[771,4806,965],{"class":866},[771,4808,4809,4812],{"class":862,"line":1080},[771,4810,4811],{"class":874},"help",[771,4813,4814],{"class":866},"(aire_rectangle)\n",[599,4816,4817],{},"Sortie attendue (extrait) :",[850,4819,4822],{"className":4820,"code":4821,"language":1281},[1279],"Renvoie l'aire d'un rectangle de longueur et largeur positives.\n\nHelp on function aire_rectangle in module __main__:\n\naire_rectangle(longueur: float, largeur: float) -> float\n    Renvoie l'aire d'un rectangle de longueur et largeur positives.\n",[858,4823,4821],{"__ignoreMap":856},[1137,4825,4827,4832],{"correct":792,"slug":4826},"specification-c1",[1141,4828,4829],{"v-slot:question":856},[599,4830,4831],{},"Où se place une docstring dans une fonction Python ?",[1141,4833,4834],{"v-slot:choices":856},[730,4835,4836,4839,4842],{},[733,4837,4838],{},"Avant la ligne def",[733,4840,4841],{},"Juste après la ligne def, en première instruction du corps",[733,4843,4844],{},"À la fin de la fonction, après le return",[594,4846,4848,4849],{"id":4847},"garantir-une-précondition-avec-assert","Garantir une précondition avec ",[858,4850,4851],{},"assert",[599,4853,4854,4855,4858,4859,4862],{},"Une bonne docstring décrit la précondition. Pour ",[603,4856,4857],{},"la faire respecter en\npratique",", on peut ajouter une ",[603,4860,4861],{},"assertion"," au début de la fonction.",[850,4864,4866],{"className":852,"code":4865,"language":855,"meta":856,"style":856},"def racine_carree(x: float) -> float:\n    \"\"\"Renvoie la racine carrée de x.\n\n    Précondition  : x >= 0.\n    Postcondition : le résultat r satisfait r >= 0 et r * r ≈ x.\n    \"\"\"\n    assert x >= 0, \"x doit être positif ou nul\"\n    return x ** 0.5\n",[858,4867,4868,4886,4891,4895,4900,4905,4909,4925],{"__ignoreMap":856},[771,4869,4870,4872,4875,4878,4880,4882,4884],{"class":862,"line":863},[771,4871,3000],{"class":870},[771,4873,4874],{"class":1022}," racine_carree",[771,4876,4877],{"class":866},"(x: ",[771,4879,1713],{"class":874},[771,4881,4490],{"class":866},[771,4883,1713],{"class":874},[771,4885,1026],{"class":866},[771,4887,4888],{"class":862,"line":878},[771,4889,4890],{"class":1250},"    \"\"\"Renvoie la racine carrée de x.\n",[771,4892,4893],{"class":862,"line":907},[771,4894,1084],{"emptyLinePlaceholder":1083},[771,4896,4897],{"class":862,"line":929},[771,4898,4899],{"class":1250},"    Précondition  : x >= 0.\n",[771,4901,4902],{"class":862,"line":1062},[771,4903,4904],{"class":1250},"    Postcondition : le résultat r satisfait r >= 0 et r * r ≈ x.\n",[771,4906,4907],{"class":862,"line":1080},[771,4908,4725],{"class":1250},[771,4910,4911,4914,4916,4918,4920,4922],{"class":862,"line":1087},[771,4912,4913],{"class":870},"    assert",[771,4915,4191],{"class":866},[771,4917,2176],{"class":870},[771,4919,2610],{"class":874},[771,4921,898],{"class":866},[771,4923,4924],{"class":1250},"\"x doit être positif ou nul\"\n",[771,4926,4927,4929,4931,4933],{"class":862,"line":1098},[771,4928,3032],{"class":870},[771,4930,4191],{"class":866},[771,4932,3852],{"class":870},[771,4934,4935],{"class":874}," 0.5\n",[599,4937,4938,4939,4942],{},"Si la précondition est violée à l'appel, Python lève une ",[858,4940,4941],{},"AssertionError","\nexplicite, plutôt que de produire un résultat absurde ou cryptique :",[850,4944,4946],{"className":852,"code":4945,"language":855,"meta":856,"style":856},"print(racine_carree(9))    # 3.0\nprint(racine_carree(-4))   # AssertionError: x doit être positif ou nul\n",[858,4947,4948,4963],{"__ignoreMap":856},[771,4949,4950,4952,4955,4957,4960],{"class":862,"line":863},[771,4951,932],{"class":874},[771,4953,4954],{"class":866},"(racine_carree(",[771,4956,3550],{"class":874},[771,4958,4959],{"class":866},"))    ",[771,4961,4962],{"class":938},"# 3.0\n",[771,4964,4965,4967,4969,4971,4973,4975],{"class":862,"line":878},[771,4966,932],{"class":874},[771,4968,4954],{"class":866},[771,4970,2631],{"class":870},[771,4972,3381],{"class":874},[771,4974,4036],{"class":866},[771,4976,4977],{"class":938},"# AssertionError: x doit être positif ou nul\n",[1439,4979,4980],{},[599,4981,4982,4984,4985,4988,4989,4992,4993,4996,4997,4999,5000,1895],{},[858,4983,4851],{}," est un ",[603,4986,4987],{},"outil de défense en développement",". En conditions de\nproduction avec l'option ",[858,4990,4991],{},"python -O",", les assertions sont ",[603,4994,4995],{},"désactivées",".\nPour des contrôles indispensables au métier, préférer un ",[858,4998,2170],{}," qui lève une\n",[858,5001,5002],{},"ValueError",[594,5004,5006],{"id":5005},"spécification-dune-fonction-concrète","Spécification d'une fonction concrète",[599,5008,5009],{},"Reprenons une fonction utile et écrivons sa spécification complète.",[850,5011,5013],{"className":852,"code":5012,"language":855,"meta":856,"style":856},"def moyenne(notes: list) -> float:\n    \"\"\"Renvoie la moyenne arithmétique d'une liste de notes.\n\n    Paramètres :\n    - notes : liste non vide de nombres (int ou float) entre 0 et 20.\n\n    Retourne :\n    - La moyenne arithmétique, un float entre 0 et 20.\n\n    Précondition  : notes est non vide ; chaque note est dans [0, 20].\n    Postcondition : 0 \u003C= résultat \u003C= 20.\n\n    Exemples :\n        >>> moyenne([10, 12, 14])\n        12.0\n        >>> moyenne([20, 20])\n        20.0\n    \"\"\"\n    assert len(notes) > 0, \"La liste de notes ne doit pas être vide\"\n    return sum(notes) \u002F len(notes)\n",[858,5014,5015,5034,5039,5043,5047,5052,5056,5060,5065,5069,5074,5079,5083,5088,5096,5102,5110,5116,5121,5141],{"__ignoreMap":856},[771,5016,5017,5019,5022,5025,5028,5030,5032],{"class":862,"line":863},[771,5018,3000],{"class":870},[771,5020,5021],{"class":1022}," moyenne",[771,5023,5024],{"class":866},"(notes: ",[771,5026,5027],{"class":874},"list",[771,5029,4490],{"class":866},[771,5031,1713],{"class":874},[771,5033,1026],{"class":866},[771,5035,5036],{"class":862,"line":878},[771,5037,5038],{"class":1250},"    \"\"\"Renvoie la moyenne arithmétique d'une liste de notes.\n",[771,5040,5041],{"class":862,"line":907},[771,5042,1084],{"emptyLinePlaceholder":1083},[771,5044,5045],{"class":862,"line":929},[771,5046,4682],{"class":1250},[771,5048,5049],{"class":862,"line":1062},[771,5050,5051],{"class":1250},"    - notes : liste non vide de nombres (int ou float) entre 0 et 20.\n",[771,5053,5054],{"class":862,"line":1080},[771,5055,1084],{"emptyLinePlaceholder":1083},[771,5057,5058],{"class":862,"line":1087},[771,5059,4701],{"class":1250},[771,5061,5062],{"class":862,"line":1098},[771,5063,5064],{"class":1250},"    - La moyenne arithmétique, un float entre 0 et 20.\n",[771,5066,5067],{"class":862,"line":1119},[771,5068,1084],{"emptyLinePlaceholder":1083},[771,5070,5071],{"class":862,"line":1125},[771,5072,5073],{"class":1250},"    Précondition  : notes est non vide ; chaque note est dans [0, 20].\n",[771,5075,5076],{"class":862,"line":2326},[771,5077,5078],{"class":1250},"    Postcondition : 0 \u003C= résultat \u003C= 20.\n",[771,5080,5081],{"class":862,"line":2333},[771,5082,1084],{"emptyLinePlaceholder":1083},[771,5084,5085],{"class":862,"line":2343},[771,5086,5087],{"class":1250},"    Exemples :\n",[771,5089,5090,5093],{"class":862,"line":2348},[771,5091,5092],{"class":870},"        >>> ",[771,5094,5095],{"class":1250},"moyenne([10, 12, 14])\n",[771,5097,5099],{"class":862,"line":5098},15,[771,5100,5101],{"class":1250},"        12.0\n",[771,5103,5105,5107],{"class":862,"line":5104},16,[771,5106,5092],{"class":870},[771,5108,5109],{"class":1250},"moyenne([20, 20])\n",[771,5111,5113],{"class":862,"line":5112},17,[771,5114,5115],{"class":1250},"        20.0\n",[771,5117,5119],{"class":862,"line":5118},18,[771,5120,4725],{"class":1250},[771,5122,5124,5126,5129,5132,5134,5136,5138],{"class":862,"line":5123},19,[771,5125,4913],{"class":870},[771,5127,5128],{"class":874}," len",[771,5130,5131],{"class":866},"(notes) ",[771,5133,2026],{"class":870},[771,5135,2610],{"class":874},[771,5137,898],{"class":866},[771,5139,5140],{"class":1250},"\"La liste de notes ne doit pas être vide\"\n",[771,5142,5144,5146,5148,5150,5153,5155],{"class":862,"line":5143},20,[771,5145,3032],{"class":870},[771,5147,997],{"class":874},[771,5149,5131],{"class":866},[771,5151,5152],{"class":870},"\u002F",[771,5154,5128],{"class":874},[771,5156,5157],{"class":866},"(notes)\n",[599,5159,5160],{},"Plusieurs choses à noter :",[3626,5162,5163,5168,5181,5192],{},[733,5164,4454,5165,5167],{},[603,5166,4457],{}," annonce types d'entrée et type de retour.",[733,5169,5170,5171,898,5174,898,5177,2132,5179,1895],{},"La docstring liste ",[603,5172,5173],{},"paramètres",[603,5175,5176],{},"retour",[603,5178,4575],{},[603,5180,4581],{},[733,5182,5183,5184,5187,5188,5191],{},"Des ",[603,5185,5186],{},"exemples"," sous le format ",[858,5189,5190],{},">>> ..."," aident à comprendre l'usage.",[733,5193,1549,5194,5196],{},[603,5195,4861],{}," garde le contrat.",[3562,5198,5199],{},[599,5200,5201,5202,5204,5205,5208],{},"Les exemples au format ",[858,5203,5190],{}," dans une docstring sont la syntaxe\n",[603,5206,5207],{},"doctest",". Python peut les exécuter automatiquement pour vérifier qu'ils\nproduisent bien le résultat annoncé — une forme légère de test intégré à\nla documentation.",[594,5210,5212],{"id":5211},"bonnes-pratiques","Bonnes pratiques",[730,5214,5215,5221,5233,5239],{},[733,5216,5217,5220],{},[603,5218,5219],{},"Une fonction, un rôle",". Si vous n'arrivez pas à décrire la fonction\nen une phrase, c'est qu'elle fait sans doute trop de choses.",[733,5222,5223,4331,5226,5229,5230,1895],{},[603,5224,5225],{},"Nom parlant",[858,5227,5228],{},"nb_voyelles_dans"," est plus utile que ",[858,5231,5232],{},"compter",[733,5234,5235,5238],{},[603,5236,5237],{},"Préconditions explicites"," dans la docstring, pas implicites dans le\ncode.",[733,5240,5241,5244],{},[603,5242,5243],{},"Types annotés"," chaque fois que possible.",[1137,5246,5248,5253],{"correct":4021,"slug":5247},"specification-c2",[1141,5249,5250],{"v-slot:question":856},[599,5251,5252],{},"Quelle est la différence entre précondition et postcondition ?",[1141,5254,5255],{"v-slot:choices":856},[730,5256,5257,5260,5263],{},[733,5258,5259],{},"La précondition est sur les arguments, la postcondition est sur le résultat",[733,5261,5262],{},"Précondition signifie avant la docstring, postcondition après",[733,5264,5265],{},"Précondition concerne le matériel, postcondition le logiciel",[594,5267,1437],{"id":1436},[1439,5269,5270],{},[730,5271,5272,5288,5294,5307],{},[733,5273,5274,4331,5277,5280,5281,5284,5285,5287],{},[603,5275,5276],{},"Annotations ne valident pas",[858,5278,5279],{},"def f(x: int)"," accepte aussi\n",[858,5282,5283],{},"f(\"bonjour\")"," sans erreur. Penser ",[858,5286,4851],{}," ou conditions explicites.",[733,5289,5290,5293],{},[603,5291,5292],{},"Docstring oubliée"," : sans elle, votre fonction est une boîte noire\npour celui qui veut l'utiliser.",[733,5295,5296,5299,5300,5303,5304,1895],{},[603,5297,5298],{},"Précondition trop forte"," : exiger des conditions inutiles complique\nl'usage. Une fonction ",[858,5301,5302],{},"est_pair(n)"," ne devrait pas exiger ",[858,5305,5306],{},"n > 0",[733,5308,5309,5312],{},[603,5310,5311],{},"Spécifier après coup"," : écrire la spécification après le code conduit\npresque toujours à des fonctions mal pensées. Spécifiez d'abord.",[594,5314,1462],{"id":1461},[599,5316,5317,5318,5321,5322,1901,5325,1895],{},"Une fonction bien spécifiée est aussi une fonction ",[603,5319,5320],{},"plus facile à tester"," :\nles exemples de la docstring sont des cas de test naturels, et la précondition\nindique quels arguments mettre dans le jeu de tests. C'est l'objet du cours\nsuivant sur la ",[603,5323,5324],{},"mise au point",[616,5326],{"code":5327},"PG03",[1474,5329,5330],{},"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 .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 .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}",{"title":856,"searchDepth":878,"depth":878,"links":5332},[5333,5334,5335,5336,5337,5339,5340,5341,5342],{"id":596,"depth":878,"text":597},{"id":4450,"depth":878,"text":4451},{"id":4567,"depth":878,"text":4568},{"id":4629,"depth":878,"text":4630},{"id":4847,"depth":878,"text":5338},"Garantir une précondition avec assert",{"id":5005,"depth":878,"text":5006},{"id":5211,"depth":878,"text":5212},{"id":1436,"depth":878,"text":1437},{"id":1461,"depth":878,"text":1462},"Signature, précondition, postcondition et docstring — décrire ce qu'une fonction promet avant de l'écrire.",{},[5346,5348],{"slug":4826,"kind":1492,"question":4831,"choices":5347,"correct":792,"multi":1494,"explanation":856},[4838,4841,4844],{"slug":5247,"kind":1492,"question":5252,"choices":5349,"correct":4021,"multi":1494,"explanation":856},[5259,5262,5265],{"title":399,"description":5343},"OQQjJ7Z9HE8IY3g0McZCFq7A2KFgByAbs94pSNhJh3I",{"id":5353,"title":403,"bo":5354,"body":5355,"description":6447,"eval":1487,"extension":1488,"labo":1487,"meta":6448,"navigation":1083,"path":404,"quizzes":6449,"readingTime":863,"seo":6455,"stem":405,"tp":1487,"__hash__":6456},"cours\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point.md",[5327],{"type":591,"value":5356,"toc":6430},[5357,5359,5371,5382,5386,5443,5450,5455,5481,5483,5489,5495,5499,5542,5544,5550,5553,5557,5643,5649,5667,5671,5687,5693,5696,5723,5738,5750,5756,5759,5869,5871,5877,5889,5893,5910,5913,5989,6007,6013,6016,6128,6134,6280,6282,6288,6292,6295,6338,6345,6370,6372,6409,6411,6427],[594,5358,597],{"id":596},[599,5360,5361,5362,5365,5366,5368,5369],{},"Un programme marche ",[603,5363,5364],{},"rarement du premier coup",". Le travail de\n",[603,5367,5324],{}," — 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. ",[616,5370],{"code":5327},[599,5372,5373,5374,5377,5378,5381],{},"Un bon programmeur ressemble moins à un magicien qu'à un ",[603,5375,5376],{},"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",[603,5379,5380],{},"démarche méthodique"," plutôt qu'en errance hasardeuse devant un message\nd'erreur incompréhensible.",[594,5383,5385],{"id":5384},"les-trois-grands-types-derreurs","Les trois grands types d'erreurs",[633,5387,5388,5399],{},[636,5389,5390],{},[639,5391,5392,5394,5397],{},[642,5393,1680],{},[642,5395,5396],{},"Symptôme",[642,5398,1683],{},[649,5400,5401,5417,5430],{},[639,5402,5403,5408,5411],{},[654,5404,5405],{},[603,5406,5407],{},"Syntaxe",[654,5409,5410],{},"Python refuse même de lancer le programme.",[654,5412,5413,5414,5416],{},"Oubli des ",[858,5415,2366],{},", parenthèse non fermée.",[639,5418,5419,5424,5427],{},[654,5420,5421],{},[603,5422,5423],{},"Exécution",[654,5425,5426],{},"Le programme démarre puis plante avec une exception.",[654,5428,5429],{},"Division par zéro, indice hors liste.",[639,5431,5432,5437,5440],{},[654,5433,5434],{},[603,5435,5436],{},"Logique",[654,5438,5439],{},"Le programme tourne, mais le résultat est faux.",[654,5441,5442],{},"Le calcul de moyenne renvoie un mauvais nombre.",[599,5444,5445,5446,5449],{},"Les erreurs ",[603,5447,5448],{},"logiques"," sont les plus dangereuses : sans test, elles\npeuvent passer inaperçues.",[5451,5452,5454],"h3",{"id":5453},"erreur-de-syntaxe","Erreur de syntaxe",[850,5456,5458],{"className":852,"code":5457,"language":855,"meta":856,"style":856},"if x > 0\n    print(\"positif\")\n",[858,5459,5460,5470],{"__ignoreMap":856},[771,5461,5462,5464,5466,5468],{"class":862,"line":863},[771,5463,2170],{"class":870},[771,5465,4191],{"class":866},[771,5467,2026],{"class":870},[771,5469,875],{"class":874},[771,5471,5472,5474,5476,5479],{"class":862,"line":878},[771,5473,2186],{"class":874},[771,5475,893],{"class":866},[771,5477,5478],{"class":1250},"\"positif\"",[771,5480,965],{"class":866},[599,5482,2449],{},[850,5484,5487],{"className":5485,"code":5486,"language":1281},[1279],"File \"...\", line 1\n    if x > 0\n           ^\nSyntaxError: expected ':'\n",[858,5488,5486],{"__ignoreMap":856},[599,5490,5491,5492,5494],{},"Le ",[858,5493,2366],{}," manquant suffit à empêcher l'exécution.",[5451,5496,5498],{"id":5497},"erreur-dexécution-exception","Erreur d'exécution (exception)",[850,5500,5502],{"className":852,"code":5501,"language":855,"meta":856,"style":856},"notes = [12, 15, 14]\nprint(notes[10])\n",[858,5503,5504,5530],{"__ignoreMap":856},[771,5505,5506,5509,5511,5514,5517,5519,5522,5524,5527],{"class":862,"line":863},[771,5507,5508],{"class":866},"notes ",[771,5510,871],{"class":870},[771,5512,5513],{"class":866}," [",[771,5515,5516],{"class":874},"12",[771,5518,898],{"class":866},[771,5520,5521],{"class":874},"15",[771,5523,898],{"class":866},[771,5525,5526],{"class":874},"14",[771,5528,5529],{"class":866},"]\n",[771,5531,5532,5534,5537,5540],{"class":862,"line":878},[771,5533,932],{"class":874},[771,5535,5536],{"class":866},"(notes[",[771,5538,5539],{"class":874},"10",[771,5541,1260],{"class":866},[599,5543,2449],{},[850,5545,5548],{"className":5546,"code":5547,"language":1281},[1279],"IndexError: list index out of range\n",[858,5549,5547],{"__ignoreMap":856},[599,5551,5552],{},"Python a tenté l'opération et a abandonné en chemin.",[5451,5554,5556],{"id":5555},"erreur-de-logique","Erreur de logique",[850,5558,5560],{"className":852,"code":5559,"language":855,"meta":856,"style":856},"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",[858,5561,5562,5571,5579,5591,5604,5616,5620],{"__ignoreMap":856},[771,5563,5564,5566,5568],{"class":862,"line":863},[771,5565,3000],{"class":870},[771,5567,5021],{"class":1022},[771,5569,5570],{"class":866},"(notes):\n",[771,5572,5573,5575,5577],{"class":862,"line":878},[771,5574,910],{"class":866},[771,5576,871],{"class":870},[771,5578,875],{"class":874},[771,5580,5581,5584,5586,5588],{"class":862,"line":907},[771,5582,5583],{"class":870},"    for",[771,5585,1072],{"class":866},[771,5587,887],{"class":870},[771,5589,5590],{"class":866}," notes:\n",[771,5592,5593,5596,5598,5601],{"class":862,"line":929},[771,5594,5595],{"class":866},"        total ",[771,5597,918],{"class":870},[771,5599,5600],{"class":866}," n           ",[771,5602,5603],{"class":938},"# oubli du = → ne modifie pas total\n",[771,5605,5606,5608,5610,5612,5614],{"class":862,"line":1062},[771,5607,3032],{"class":870},[771,5609,915],{"class":866},[771,5611,5152],{"class":870},[771,5613,5128],{"class":874},[771,5615,5157],{"class":866},[771,5617,5618],{"class":862,"line":1080},[771,5619,1084],{"emptyLinePlaceholder":1083},[771,5621,5622,5624,5627,5629,5631,5633,5635,5637,5640],{"class":862,"line":1087},[771,5623,932],{"class":874},[771,5625,5626],{"class":866},"(moyenne([",[771,5628,5539],{"class":874},[771,5630,898],{"class":866},[771,5632,5516],{"class":874},[771,5634,898],{"class":866},[771,5636,5526],{"class":874},[771,5638,5639],{"class":866},"]))   ",[771,5641,5642],{"class":938},"# 0.0 — pas l'erreur attendue !\n",[599,5644,5645,5646,1895],{},"Le programme tourne sans crier, mais répond ",[603,5647,5648],{},"n'importe quoi",[1137,5650,5652,5657],{"correct":3168,"slug":5651},"mise-au-point-c1",[1141,5653,5654],{"v-slot:question":856},[599,5655,5656],{},"Quel est le type d'erreur le plus difficile à détecter ?",[1141,5658,5659],{"v-slot:choices":856},[730,5660,5661,5663,5665],{},[733,5662,5407],{},[733,5664,5423],{},[733,5666,5436],{},[594,5668,5670],{"id":5669},"lire-un-message-derreur","Lire un message d'erreur",[599,5672,5673,5674,2098,5677,5680,5681,2875,5684,1895],{},"Quand Python plante, il affiche une ",[603,5675,5676],{},"trace",[714,5678,5679],{},"traceback",") qui se lit\n",[603,5682,5683],{},"de haut en bas pour suivre l'enchaînement",[603,5685,5686],{},"de bas en haut pour\ntrouver la cause immédiate",[850,5688,5691],{"className":5689,"code":5690,"language":1281},[1279],"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",[858,5692,5690],{"__ignoreMap":856},[599,5694,5695],{},"Trois informations clés :",[3626,5697,5698,5706,5714],{},[733,5699,5700,4331,5703,1895],{},[603,5701,5702],{},"Le type d'erreur",[858,5704,5705],{},"ZeroDivisionError",[733,5707,5708,4331,5711,1895],{},[603,5709,5710],{},"Le message",[858,5712,5713],{},"division by zero",[733,5715,5716,5719,5720,1895],{},[603,5717,5718],{},"L'endroit"," : ligne 8 dans la fonction ",[858,5721,5722],{},"moyenne",[599,5724,5725,5726,5729,5730,5733,5734,5737],{},"Ici, l'enchaînement révèle qu'on appelle ",[858,5727,5728],{},"moyenne([])"," — liste vide,\n",[858,5731,5732],{},"len([]) == 0",", division par zéro. La cause est ",[603,5735,5736],{},"dans l'appel",", pas dans\nla fonction.",[3562,5739,5740],{},[599,5741,5742,5743,5746,5747,1895],{},"Toujours commencer par ",[603,5744,5745],{},"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 ",[858,5748,5749],{},"Traceback",[594,5751,5491,5753,5755],{"id":5752},"le-print-de-débogage",[858,5754,932],{}," de débogage",[599,5757,5758],{},"L'outil de débogage le plus universel : afficher l'état des variables à des\npoints clés du programme.",[850,5760,5762],{"className":852,"code":5761,"language":855,"meta":856,"style":856},"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",[858,5763,5764,5772,5780,5790,5812,5820,5834,5846,5850],{"__ignoreMap":856},[771,5765,5766,5768,5770],{"class":862,"line":863},[771,5767,3000],{"class":870},[771,5769,5021],{"class":1022},[771,5771,5570],{"class":866},[771,5773,5774,5776,5778],{"class":862,"line":878},[771,5775,910],{"class":866},[771,5777,871],{"class":870},[771,5779,875],{"class":874},[771,5781,5782,5784,5786,5788],{"class":862,"line":907},[771,5783,5583],{"class":870},[771,5785,1072],{"class":866},[771,5787,887],{"class":870},[771,5789,5590],{"class":866},[771,5791,5792,5795,5797,5800,5803,5806,5809],{"class":862,"line":929},[771,5793,5794],{"class":874},"        print",[771,5796,893],{"class":866},[771,5798,5799],{"class":1250},"\"avant :\"",[771,5801,5802],{"class":866},", total, ",[771,5804,5805],{"class":1250},"\"ajout :\"",[771,5807,5808],{"class":866},", n)   ",[771,5810,5811],{"class":938},"# debug\n",[771,5813,5814,5816,5818],{"class":862,"line":1062},[771,5815,5595],{"class":866},[771,5817,1069],{"class":870},[771,5819,1077],{"class":866},[771,5821,5822,5824,5826,5829,5832],{"class":862,"line":1080},[771,5823,5794],{"class":874},[771,5825,893],{"class":866},[771,5827,5828],{"class":1250},"\"après :\"",[771,5830,5831],{"class":866},", total)                  ",[771,5833,5811],{"class":938},[771,5835,5836,5838,5840,5842,5844],{"class":862,"line":1087},[771,5837,3032],{"class":870},[771,5839,915],{"class":866},[771,5841,5152],{"class":870},[771,5843,5128],{"class":874},[771,5845,5157],{"class":866},[771,5847,5848],{"class":862,"line":1098},[771,5849,1084],{"emptyLinePlaceholder":1083},[771,5851,5852,5854,5856,5858,5860,5862,5864,5866],{"class":862,"line":1119},[771,5853,932],{"class":874},[771,5855,5626],{"class":866},[771,5857,5539],{"class":874},[771,5859,898],{"class":866},[771,5861,5516],{"class":874},[771,5863,898],{"class":866},[771,5865,5526],{"class":874},[771,5867,5868],{"class":866},"]))\n",[599,5870,2449],{},[850,5872,5875],{"className":5873,"code":5874,"language":1281},[1279],"avant : 0 ajout : 10\naprès : 10\navant : 10 ajout : 12\naprès : 22\navant : 22 ajout : 14\naprès : 36\n12.0\n",[858,5876,5874],{"__ignoreMap":856},[599,5878,5879,5880,5883,5884],{},"On voit en direct comment ",[858,5881,5882],{},"total"," évolue, et on confirme que la valeur\nfinale est cohérente. ",[603,5885,5886,5887,1895],{},"Une fois le bug corrigé, on retire les ",[858,5888,932],{},[594,5890,5892],{"id":5891},"jeux-de-tests","Jeux de tests",[599,5894,5895,5896,5899,5900,5902,5903,5906,5907,1895],{},"Pour qu'un programme soit ",[603,5897,5898],{},"correct",", il ne suffit pas qu'il marche sur\n",[603,5901,623],{}," exemple : il faut qu'il marche sur ",[603,5904,5905],{},"un échantillon représentatif","\nd'entrées possibles. C'est un ",[603,5908,5909],{},"jeu de tests",[599,5911,5912],{},"Quatre familles de cas à toujours envisager :",[633,5914,5915,5928],{},[636,5916,5917],{},[639,5918,5919,5922],{},[642,5920,5921],{},"Famille",[642,5923,5924,5925],{},"Exemples pour ",[858,5926,5927],{},"moyenne(notes)",[649,5929,5930,5945,5962,5972],{},[639,5931,5932,5937],{},[654,5933,5934],{},[603,5935,5936],{},"Cas normaux",[654,5938,5939,898,5942],{},[858,5940,5941],{},"[10, 12, 14]",[858,5943,5944],{},"[8, 15]",[639,5946,5947,5952],{},[654,5948,5949],{},[603,5950,5951],{},"Cas limites",[654,5953,5954,5957,5958,5961],{},[858,5955,5956],{},"[20, 20, 20]"," (toutes à 20), ",[858,5959,5960],{},"[0]"," (un seul élément)",[639,5963,5964,5969],{},[654,5965,5966],{},[603,5967,5968],{},"Cas extrêmes",[654,5970,5971],{},"liste de 100 notes, notes très proches de 0 ou 20",[639,5973,5974,5979],{},[654,5975,5976],{},[603,5977,5978],{},"Cas interdits",[654,5980,5981,5984,5985,5988],{},[858,5982,5983],{},"[]"," (vide), ",[858,5986,5987],{},"[25]"," (hors plage) → précondition",[1439,5990,5991,6001],{},[599,5992,5993,5996,5997,6000],{},[603,5994,5995],{},"Le succès d'un jeu de tests ne prouve pas la correction."," Il prouve que\nle programme ",[603,5998,5999],{},"marche sur ces cas",". Il peut très bien échouer sur le 51ᵉ\ncas qu'on n'a pas pensé à tester.",[599,6002,6003,6004,6006],{},"C'est exactement le commentaire associé à l'item ",[616,6005],{"code":5327}," du\nprogramme : « le succès d'un jeu de tests ne garantit pas la correction\nd'un programme ».",[594,6008,6010,6011],{"id":6009},"tester-avec-assert","Tester avec ",[858,6012,4851],{},[599,6014,6015],{},"Le moyen le plus simple de coder un jeu de tests : enchaîner des assertions\nqui doivent toutes passer.",[850,6017,6019],{"className":852,"code":6018,"language":855,"meta":856,"style":856},"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",[858,6020,6021,6029,6039,6043,6048,6063,6078,6097,6113,6117],{"__ignoreMap":856},[771,6022,6023,6025,6027],{"class":862,"line":863},[771,6024,3000],{"class":870},[771,6026,4100],{"class":1022},[771,6028,3027],{"class":866},[771,6030,6031,6033,6035,6037],{"class":862,"line":878},[771,6032,3032],{"class":870},[771,6034,1072],{"class":866},[771,6036,923],{"class":870},[771,6038,2733],{"class":874},[771,6040,6041],{"class":862,"line":907},[771,6042,1084],{"emptyLinePlaceholder":1083},[771,6044,6045],{"class":862,"line":929},[771,6046,6047],{"class":938},"# Jeu de tests\n",[771,6049,6050,6052,6055,6057,6059,6061],{"class":862,"line":1062},[771,6051,4851],{"class":870},[771,6053,6054],{"class":866}," double(",[771,6056,4021],{"class":874},[771,6058,1944],{"class":866},[771,6060,1630],{"class":870},[771,6062,875],{"class":874},[771,6064,6065,6067,6069,6071,6073,6075],{"class":862,"line":1080},[771,6066,4851],{"class":870},[771,6068,6054],{"class":866},[771,6070,1257],{"class":874},[771,6072,1944],{"class":866},[771,6074,1630],{"class":870},[771,6076,6077],{"class":874}," 6\n",[771,6079,6080,6082,6084,6086,6088,6090,6092,6095],{"class":862,"line":1087},[771,6081,4851],{"class":870},[771,6083,6054],{"class":866},[771,6085,2631],{"class":870},[771,6087,3168],{"class":874},[771,6089,1944],{"class":866},[771,6091,1630],{"class":870},[771,6093,6094],{"class":870}," -",[771,6096,3834],{"class":874},[771,6098,6099,6101,6103,6106,6108,6110],{"class":862,"line":1098},[771,6100,4851],{"class":870},[771,6102,6054],{"class":866},[771,6104,6105],{"class":874},"100",[771,6107,1944],{"class":866},[771,6109,1630],{"class":870},[771,6111,6112],{"class":874}," 200\n",[771,6114,6115],{"class":862,"line":1119},[771,6116,1084],{"emptyLinePlaceholder":1083},[771,6118,6119,6121,6123,6126],{"class":862,"line":1125},[771,6120,932],{"class":874},[771,6122,893],{"class":866},[771,6124,6125],{"class":1250},"\"Tous les tests passent.\"",[771,6127,965],{"class":866},[599,6129,6130,6131,6133],{},"Si une assertion échoue, Python lève ",[858,6132,4941],{}," à la ligne précise.\nSi toutes passent, on voit le message final.",[1223,6135,6136],{},[850,6137,6139],{"className":852,"code":6138,"language":855,"meta":856,"style":856},"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",[858,6140,6141,6149,6159,6165,6171,6175,6179,6201,6222,6243,6270],{"__ignoreMap":856},[771,6142,6143,6145,6147],{"class":862,"line":863},[771,6144,3000],{"class":870},[771,6146,3460],{"class":1022},[771,6148,3294],{"class":866},[771,6150,6151,6153,6155,6157],{"class":862,"line":878},[771,6152,3467],{"class":870},[771,6154,3301],{"class":866},[771,6156,2026],{"class":870},[771,6158,3474],{"class":866},[771,6160,6161,6163],{"class":862,"line":907},[771,6162,3479],{"class":870},[771,6164,3482],{"class":866},[771,6166,6167,6169],{"class":862,"line":929},[771,6168,3032],{"class":870},[771,6170,3306],{"class":866},[771,6172,6173],{"class":862,"line":1062},[771,6174,1084],{"emptyLinePlaceholder":1083},[771,6176,6177],{"class":862,"line":1080},[771,6178,6047],{"class":938},[771,6180,6181,6183,6186,6188,6190,6192,6194,6196,6198],{"class":862,"line":1087},[771,6182,4851],{"class":870},[771,6184,6185],{"class":866}," maximum(",[771,6187,1257],{"class":874},[771,6189,898],{"class":866},[771,6191,830],{"class":874},[771,6193,1944],{"class":866},[771,6195,1630],{"class":870},[771,6197,1646],{"class":874},[771,6199,6200],{"class":938},"         # b est plus grand\n",[771,6202,6203,6205,6207,6209,6211,6213,6215,6217,6219],{"class":862,"line":1098},[771,6204,4851],{"class":870},[771,6206,6185],{"class":866},[771,6208,3153],{"class":874},[771,6210,898],{"class":866},[771,6212,3168],{"class":874},[771,6214,1944],{"class":866},[771,6216,1630],{"class":870},[771,6218,1973],{"class":874},[771,6220,6221],{"class":938},"         # a est plus grand\n",[771,6223,6224,6226,6228,6230,6232,6234,6236,6238,6240],{"class":862,"line":1119},[771,6225,4851],{"class":870},[771,6227,6185],{"class":866},[771,6229,3381],{"class":874},[771,6231,898],{"class":866},[771,6233,3381],{"class":874},[771,6235,1944],{"class":866},[771,6237,1630],{"class":870},[771,6239,3898],{"class":874},[771,6241,6242],{"class":938},"         # cas d'égalité\n",[771,6244,6245,6247,6249,6251,6253,6255,6257,6259,6261,6263,6265,6267],{"class":862,"line":1125},[771,6246,4851],{"class":870},[771,6248,6185],{"class":866},[771,6250,2631],{"class":870},[771,6252,792],{"class":874},[771,6254,898],{"class":866},[771,6256,2631],{"class":870},[771,6258,1257],{"class":874},[771,6260,1944],{"class":866},[771,6262,1630],{"class":870},[771,6264,6094],{"class":870},[771,6266,792],{"class":874},[771,6268,6269],{"class":938},"      # nombres négatifs\n",[771,6271,6272,6274,6276,6278],{"class":862,"line":2326},[771,6273,932],{"class":874},[771,6275,893],{"class":866},[771,6277,6125],{"class":1250},[771,6279,965],{"class":866},[599,6281,2037],{},[850,6283,6286],{"className":6284,"code":6285,"language":1281},[1279],"Tous les tests passent.\n",[858,6287,6285],{"__ignoreMap":856},[594,6289,6291],{"id":6290},"démarche-méthodique","Démarche méthodique",[599,6293,6294],{},"Devant un bug, suivre la séquence :",[3626,6296,6297,6303,6308,6314,6322,6328],{},[733,6298,6299,6302],{},[603,6300,6301],{},"Reproduire"," le bug — quel appel précis le déclenche ?",[733,6304,6305,6307],{},[603,6306,3655],{}," : trouver l'entrée la plus simple qui plante.",[733,6309,6310,6313],{},[603,6311,6312],{},"Lire"," le message d'erreur si présent.",[733,6315,6316,4331,6319,6321],{},[603,6317,6318],{},"Tracer",[858,6320,932],{}," ou débogueur pour suivre les valeurs.",[733,6323,6324,6327],{},[603,6325,6326],{},"Formuler une hypothèse"," sur la cause.",[733,6329,6330,6333,6334,6337],{},[603,6331,6332],{},"Corriger",", puis ",[603,6335,6336],{},"relancer le jeu de tests complet"," — pas seulement\nle cas qui plantait.",[599,6339,6340,6341,6344],{},"La dernière étape est cruciale : une correction peut introduire un nouveau\nbug. C'est la ",[603,6342,6343],{},"régression",". Le jeu de tests complet protège contre cela.",[1137,6346,6348,6357],{"correct":792,"slug":6347},"mise-au-point-c2",[1141,6349,6350],{"v-slot:question":856},[599,6351,6352,6353,6356],{},"Que se passe-t-il si ",[858,6354,6355],{},"assert 1 == 2"," est exécuté ?",[1141,6358,6359],{"v-slot:choices":856},[730,6360,6361,6364,6367],{},[733,6362,6363],{},"Le programme continue sans rien faire",[733,6365,6366],{},"Le programme lève AssertionError",[733,6368,6369],{},"Le programme affiche False",[594,6371,1437],{"id":1436},[1439,6373,6374],{},[730,6375,6376,6382,6388,6394,6400],{},[733,6377,6378,6381],{},[603,6379,6380],{},"Modifier au hasard"," : changer une ligne en espérant que ça marche\nsans comprendre est la pire stratégie.",[733,6383,6384,6387],{},[603,6385,6386],{},"Tester uniquement les cas normaux"," : un programme correct gère aussi\nles cas limites (liste vide, valeur nulle…).",[733,6389,6390,6393],{},[603,6391,6392],{},"Oublier de relancer tous les tests"," après correction — risque de\nrégression.",[733,6395,6396,6399],{},[603,6397,6398],{},"Confondre absence d'erreur et correction"," : un programme qui ne plante\npas peut tout à fait donner de mauvais résultats.",[733,6401,6402,6408],{},[603,6403,6404,6405,6407],{},"Laisser les ",[858,6406,932],{}," de debug"," dans le code final.",[594,6410,1462],{"id":1461},[599,6412,6413,6414,2098,6417,6420,6421,6423,6424,6426],{},"Le jeu de tests est tellement central qu'il a donné naissance à un style de\nprogrammation entier : le ",[603,6415,6416],{},"TDD",[714,6418,6419],{},"Test-Driven Development",") — on écrit les\ntests ",[603,6422,4441],{}," le code. Vous le pratiquerez avec naturel dès que la\nspécification ",[616,6425],{"code":4393}," sera bien en place : précondition →\npostcondition → tests → code.",[1474,6428,6429],{},"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":856,"searchDepth":878,"depth":878,"links":6431},[6432,6433,6438,6439,6441,6442,6444,6445,6446],{"id":596,"depth":878,"text":597},{"id":5384,"depth":878,"text":5385,"children":6434},[6435,6436,6437],{"id":5453,"depth":907,"text":5454},{"id":5497,"depth":907,"text":5498},{"id":5555,"depth":907,"text":5556},{"id":5669,"depth":878,"text":5670},{"id":5752,"depth":878,"text":6440},"Le print de débogage",{"id":5891,"depth":878,"text":5892},{"id":6009,"depth":878,"text":6443},"Tester avec assert",{"id":6290,"depth":878,"text":6291},{"id":1436,"depth":878,"text":1437},{"id":1461,"depth":878,"text":1462},"Bugs, débogage, jeux de tests et assertions — la démarche méthodique pour rendre un programme correct.",{},[6450,6452],{"slug":5651,"kind":1492,"question":5656,"choices":6451,"correct":3168,"multi":1494,"explanation":856},[5407,5423,5436],{"slug":6347,"kind":1492,"question":6453,"choices":6454,"correct":792,"multi":1494,"explanation":856},"Que se passe-t-il si assert 1 == 2 est exécuté ?",[6363,6366,6369],{"title":403,"description":6447},"x_i-DvKgQizY7BKW1ertN3iUeOySw1aRkvaKBsahirE",{"id":6458,"title":407,"bo":6459,"body":6461,"description":8375,"eval":1487,"extension":1488,"labo":1487,"meta":8376,"navigation":1083,"path":408,"quizzes":8377,"readingTime":863,"seo":8383,"stem":409,"tp":1487,"__hash__":8384},"cours\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F6.bibliotheques.md",[6460],"PG05",{"type":591,"value":6462,"toc":8358},[6463,6465,6486,6488,6497,6501,6510,6546,6564,6568,6661,6723,6741,6764,6768,6775,6804,6817,6837,6840,6846,6852,6879,6885,6890,7267,7469,7471,7477,7483,7492,7727,7876,7879,7885,7908,7914,7917,7979,8140,8142,8148,8159,8163,8174,8180,8186,8206,8210,8236,8238,8324,8326,8355],[594,6464,597],{"id":596},[599,6466,6467,6468,6471,6472,6475,6476,6479,6480,6483,6484,1895],{},"Vous n'avez pas à tout réécrire vous-même. Calcul d'une racine carrée,\ntirage aléatoire, moyenne d'une liste, manipulation d'un fichier : toutes\nces opérations existent déjà, ",[603,6469,6470],{},"prêtes à l'emploi",", dans la\n",[603,6473,6474],{},"bibliothèque standard"," de Python — installée d'office. Apprendre à\n",[603,6477,6478],{},"utiliser une bibliothèque",", c'est apprendre à ",[603,6481,6482],{},"lire sa documentation","\net à mobiliser ses fonctions avec la bonne syntaxe d'",[603,6485,1212],{},[616,6487],{"code":6460},[599,6489,6490,6491,2875,6494,1895],{},"L'objectif n'est pas de connaître toutes les bibliothèques par cœur — il y\nen a des centaines — mais de ",[603,6492,6493],{},"savoir lire une doc",[603,6495,6496],{},"importer ce dont\non a besoin",[594,6498,6500],{"id":6499},"importer-un-module","Importer un module",[599,6502,724,6503,6506,6507,1895],{},[603,6504,6505],{},"module"," est un fichier Python qui regroupe des fonctions et des\nconstantes liées à un thème (mathématiques, hasard, statistiques, dates…).\nPour utiliser un module, il faut d'abord l'",[603,6508,6509],{},"importer",[850,6511,6513],{"className":852,"code":6512,"language":855,"meta":856,"style":856},"import math\nprint(math.sqrt(16))      # 4.0\nprint(math.pi)            # 3.141592653589793\n",[858,6514,6515,6521,6536],{"__ignoreMap":856},[771,6516,6517,6519],{"class":862,"line":863},[771,6518,1212],{"class":870},[771,6520,3806],{"class":866},[771,6522,6523,6525,6528,6531,6533],{"class":862,"line":878},[771,6524,932],{"class":874},[771,6526,6527],{"class":866},"(math.sqrt(",[771,6529,6530],{"class":874},"16",[771,6532,1802],{"class":866},[771,6534,6535],{"class":938},"# 4.0\n",[771,6537,6538,6540,6543],{"class":862,"line":907},[771,6539,932],{"class":874},[771,6541,6542],{"class":866},"(math.pi)            ",[771,6544,6545],{"class":938},"# 3.141592653589793\n",[599,6547,6548,6549,6551,6552,6554,6555,4331,6558,898,6561,1895],{},"L'instruction ",[858,6550,3665],{}," rend disponible l'objet ",[858,6553,780],{},", qu'on utilise\nensuite avec la notation ",[603,6556,6557],{},"point",[858,6559,6560],{},"math.sqrt",[858,6562,6563],{},"math.pi",[5451,6565,6567],{"id":6566},"trois-formes-dimport","Trois formes d'import",[850,6569,6571],{"className":852,"code":6570,"language":855,"meta":856,"style":856},"# Forme 1 : import du module entier\nimport math\nmath.sqrt(16)\n\n# Forme 2 : import d'éléments précis\nfrom math import sqrt, pi\nsqrt(16)\nprint(pi)\n\n# Forme 3 : import avec alias\nimport math as m\nm.sqrt(16)\n",[858,6572,6573,6578,6584,6593,6597,6602,6615,6624,6631,6635,6640,6652],{"__ignoreMap":856},[771,6574,6575],{"class":862,"line":863},[771,6576,6577],{"class":938},"# Forme 1 : import du module entier\n",[771,6579,6580,6582],{"class":862,"line":878},[771,6581,1212],{"class":870},[771,6583,3806],{"class":866},[771,6585,6586,6589,6591],{"class":862,"line":907},[771,6587,6588],{"class":866},"math.sqrt(",[771,6590,6530],{"class":874},[771,6592,965],{"class":866},[771,6594,6595],{"class":862,"line":929},[771,6596,1084],{"emptyLinePlaceholder":1083},[771,6598,6599],{"class":862,"line":1062},[771,6600,6601],{"class":938},"# Forme 2 : import d'éléments précis\n",[771,6603,6604,6607,6610,6612],{"class":862,"line":1080},[771,6605,6606],{"class":870},"from",[771,6608,6609],{"class":866}," math ",[771,6611,1212],{"class":870},[771,6613,6614],{"class":866}," sqrt, pi\n",[771,6616,6617,6620,6622],{"class":862,"line":1087},[771,6618,6619],{"class":866},"sqrt(",[771,6621,6530],{"class":874},[771,6623,965],{"class":866},[771,6625,6626,6628],{"class":862,"line":1098},[771,6627,932],{"class":874},[771,6629,6630],{"class":866},"(pi)\n",[771,6632,6633],{"class":862,"line":1119},[771,6634,1084],{"emptyLinePlaceholder":1083},[771,6636,6637],{"class":862,"line":1125},[771,6638,6639],{"class":938},"# Forme 3 : import avec alias\n",[771,6641,6642,6644,6646,6649],{"class":862,"line":2326},[771,6643,1212],{"class":870},[771,6645,6609],{"class":866},[771,6647,6648],{"class":870},"as",[771,6650,6651],{"class":866}," m\n",[771,6653,6654,6657,6659],{"class":862,"line":2333},[771,6655,6656],{"class":866},"m.sqrt(",[771,6658,6530],{"class":874},[771,6660,965],{"class":866},[633,6662,6663,6676],{},[636,6664,6665],{},[639,6666,6667,6670,6673],{},[642,6668,6669],{},"Forme",[642,6671,6672],{},"Avantage",[642,6674,6675],{},"Inconvénient",[649,6677,6678,6692,6710],{},[639,6679,6680,6684,6689],{},[654,6681,6682],{},[858,6683,3665],{},[654,6685,6686,6687],{},"Origine claire : ",[858,6688,6560],{},[654,6690,6691],{},"Un peu plus verbeux",[639,6693,6694,6699,6705],{},[654,6695,6696],{},[858,6697,6698],{},"from math import sqrt",[654,6700,6701,6702],{},"Plus court : ",[858,6703,6704],{},"sqrt(16)",[654,6706,6707,6708],{},"Conflit possible avec un autre ",[858,6709,3714],{},[639,6711,6712,6717,6720],{},[654,6713,6714],{},[858,6715,6716],{},"import math as m",[654,6718,6719],{},"Très court",[654,6721,6722],{},"Lisibilité dépend de l'alias",[3562,6724,6725],{},[599,6726,6727,6730,6731,815,6733,6736,6737,6740],{},[603,6728,6729],{},"Bonne habitude"," : préférer ",[858,6732,3665],{},[858,6734,6735],{},"from math import *",". Le\nsecond importe ",[603,6738,6739],{},"tout"," d'un seul coup et pollue l'espace de noms — vous\nne savez plus d'où vient une fonction.",[1137,6742,6744,6753],{"correct":792,"slug":6743},"bibliotheques-c1",[1141,6745,6746],{"v-slot:question":856},[599,6747,6748,6749,6752],{},"Quel import permet d'écrire directement ",[858,6750,6751],{},"pi"," (sans préfixe) dans le code ?",[1141,6754,6755],{"v-slot:choices":856},[730,6756,6757,6759,6762],{},[733,6758,3665],{},[733,6760,6761],{},"from math import pi",[733,6763,6716],{},[594,6765,6767],{"id":6766},"lire-une-documentation","Lire une documentation",[599,6769,6770,6771,6774],{},"Toute fonction d'une bibliothèque a ",[603,6772,6773],{},"trois niveaux de doc"," accessibles\nsans quitter Python :",[850,6776,6778],{"className":852,"code":6777,"language":855,"meta":856,"style":856},"import math\nhelp(math.sqrt)\nprint(math.sqrt.__doc__)\n",[858,6779,6780,6786,6793],{"__ignoreMap":856},[771,6781,6782,6784],{"class":862,"line":863},[771,6783,1212],{"class":870},[771,6785,3806],{"class":866},[771,6787,6788,6790],{"class":862,"line":878},[771,6789,4811],{"class":874},[771,6791,6792],{"class":866},"(math.sqrt)\n",[771,6794,6795,6797,6800,6802],{"class":862,"line":907},[771,6796,932],{"class":874},[771,6798,6799],{"class":866},"(math.sqrt.",[771,6801,4745],{"class":874},[771,6803,965],{"class":866},[599,6805,6806,6807,6810,6811,1895],{},"Et bien sûr la ",[603,6808,6809],{},"documentation officielle en ligne"," :\n",[2464,6812,6816],{"href":6813,"rel":6814},"https:\u002F\u002Fdocs.python.org\u002Ffr\u002F3\u002Flibrary\u002F",[6815],"nofollow","docs.python.org\u002Ffr\u002F3\u002Flibrary\u002F",[1223,6818,6819],{},[850,6820,6822],{"className":852,"code":6821,"language":855,"meta":856,"style":856},"import math\nhelp(math.factorial)\n",[858,6823,6824,6830],{"__ignoreMap":856},[771,6825,6826,6828],{"class":862,"line":863},[771,6827,1212],{"class":870},[771,6829,3806],{"class":866},[771,6831,6832,6834],{"class":862,"line":878},[771,6833,4811],{"class":874},[771,6835,6836],{"class":866},"(math.factorial)\n",[599,6838,6839],{},"Sortie (extrait) :",[850,6841,6844],{"className":6842,"code":6843,"language":1281},[1279],"Help on built-in function factorial in module math:\n\nfactorial(n, \u002F)\n    Find n!.\n",[858,6845,6843],{"__ignoreMap":856},[599,6847,6848,6849,2218],{},"Quand vous découvrez une fonction, posez-vous ",[603,6850,6851],{},"quatre questions",[3626,6853,6854,6861,6867,6873],{},[733,6855,6856,6857,6860],{},"Quel est son ",[603,6858,6859],{},"nom"," complet (module + fonction) ?",[733,6862,6863,6864,6866],{},"Quels ",[603,6865,5173],{}," prend-elle ?",[733,6868,6869,6870,6872],{},"Que ",[603,6871,3064],{},"-t-elle ?",[733,6874,6875,6876,6878],{},"Y a-t-il une ",[603,6877,4575],{}," sur les arguments ?",[594,6880,6882,6883],{"id":6881},"le-module-math","Le module ",[858,6884,780],{},[599,6886,6882,6887,6889],{},[858,6888,780],{}," fournit les fonctions et constantes mathématiques usuelles.",[633,6891,6892,6902],{},[636,6893,6894],{},[639,6895,6896,6899],{},[642,6897,6898],{},"Fonction \u002F constante",[642,6900,6901],{},"Rôle",[649,6903,6904,6985,7057,7095,7105,7115,7216,7254],{},[639,6905,6906,6910],{},[654,6907,6908],{},[858,6909,6563],{},[654,6911,6912,6913],{},"Constante ",[771,6914,6916,6938],{"className":6915},[774],[771,6917,6919],{"className":6918},[778],[780,6920,6921],{"xmlns":782},[784,6922,6923,6935],{},[787,6924,6925,6928,6932],{},[3695,6926,6927],{},"π",[6929,6930,6931],"mo",{},"≈",[790,6933,6934],{},"3,14159",[794,6936,6937],{"encoding":796},"\\pi \\approx 3{,}14159",[771,6939,6941,6964],{"className":6940,"ariaHidden":801},[800],[771,6942,6944,6948,6952,6957,6961],{"className":6943},[805],[771,6945],{"className":6946,"style":6947},[809],"height:0.4831em;",[771,6949,6927],{"className":6950,"style":6951},[814,3746],"margin-right:0.0359em;",[771,6953],{"className":6954,"style":6956},[6955],"mspace","margin-right:0.2778em;",[771,6958,6931],{"className":6959},[6960],"mrel",[771,6962],{"className":6963,"style":6956},[6955],[771,6965,6967,6971,6974,6981],{"className":6966},[805],[771,6968],{"className":6969,"style":6970},[809],"height:0.8389em;vertical-align:-0.1944em;",[771,6972,1257],{"className":6973},[814],[771,6975,6977],{"className":6976},[814],[771,6978,3050],{"className":6979},[6980],"mpunct",[771,6982,6984],{"className":6983},[814],"14159",[639,6986,6987,6992],{},[654,6988,6989],{},[858,6990,6991],{},"math.e",[654,6993,6912,6994],{},[771,6995,6997,7017],{"className":6996},[774],[771,6998,7000],{"className":6999},[778],[780,7001,7002],{"xmlns":782},[784,7003,7004,7014],{},[787,7005,7006,7009,7011],{},[3695,7007,7008],{},"e",[6929,7010,6931],{},[790,7012,7013],{},"2,71828",[794,7015,7016],{"encoding":796},"e \\approx 2{,}71828",[771,7018,7020,7038],{"className":7019,"ariaHidden":801},[800],[771,7021,7023,7026,7029,7032,7035],{"className":7022},[805],[771,7024],{"className":7025,"style":6947},[809],[771,7027,7008],{"className":7028},[814,3746],[771,7030],{"className":7031,"style":6956},[6955],[771,7033,6931],{"className":7034},[6960],[771,7036],{"className":7037,"style":6956},[6955],[771,7039,7041,7044,7047,7053],{"className":7040},[805],[771,7042],{"className":7043,"style":6970},[809],[771,7045,3168],{"className":7046},[814],[771,7048,7050],{"className":7049},[814],[771,7051,3050],{"className":7052},[6980],[771,7054,7056],{"className":7055},[814],"71828",[639,7058,7059,7063],{},[654,7060,7061],{},[858,7062,3677],{},[654,7064,7065,7066],{},"Racine carrée de ",[771,7067,7069,7082],{"className":7068},[774],[771,7070,7072],{"className":7071},[778],[780,7073,7074],{"xmlns":782},[784,7075,7076,7080],{},[787,7077,7078],{},[3695,7079,3697],{},[794,7081,3697],{"encoding":796},[771,7083,7085],{"className":7084,"ariaHidden":801},[800],[771,7086,7088,7092],{"className":7087},[805],[771,7089],{"className":7090,"style":7091},[809],"height:0.4306em;",[771,7093,3697],{"className":7094},[814,3746],[639,7096,7097,7102],{},[654,7098,7099],{},[858,7100,7101],{},"math.floor(x)",[654,7103,7104],{},"Partie entière par défaut",[639,7106,7107,7112],{},[654,7108,7109],{},[858,7110,7111],{},"math.ceil(x)",[654,7113,7114],{},"Partie entière par excès",[639,7116,7117,7122],{},[654,7118,7119],{},[858,7120,7121],{},"math.factorial(n)",[654,7123,7124,7162,7163],{},[771,7125,7127,7145],{"className":7126},[774],[771,7128,7130],{"className":7129},[778],[780,7131,7132],{"xmlns":782},[784,7133,7134,7142],{},[787,7135,7136,7138],{},[3695,7137,2665],{},[6929,7139,7141],{"stretchy":7140},"false","!",[794,7143,7144],{"encoding":796},"n!",[771,7146,7148],{"className":7147,"ariaHidden":801},[800],[771,7149,7151,7155,7158],{"className":7150},[805],[771,7152],{"className":7153,"style":7154},[809],"height:0.6944em;",[771,7156,2665],{"className":7157},[814,3746],[771,7159,7141],{"className":7160},[7161],"mclose"," pour un entier ",[771,7164,7166,7185],{"className":7165},[774],[771,7167,7169],{"className":7168},[778],[780,7170,7171],{"xmlns":782},[784,7172,7173,7182],{},[787,7174,7175,7177,7180],{},[3695,7176,2665],{},[6929,7178,7179],{},"≥",[790,7181,4021],{},[794,7183,7184],{"encoding":796},"n \\geq 0",[771,7186,7188,7207],{"className":7187,"ariaHidden":801},[800],[771,7189,7191,7195,7198,7201,7204],{"className":7190},[805],[771,7192],{"className":7193,"style":7194},[809],"height:0.7719em;vertical-align:-0.136em;",[771,7196,2665],{"className":7197},[814,3746],[771,7199],{"className":7200,"style":6956},[6955],[771,7202,7179],{"className":7203},[6960],[771,7205],{"className":7206,"style":6956},[6955],[771,7208,7210,7213],{"className":7209},[805],[771,7211],{"className":7212,"style":810},[809],[771,7214,4021],{"className":7215},[814],[639,7217,7218,7223],{},[654,7219,7220],{},[858,7221,7222],{},"math.log(x)",[654,7224,7225,7226],{},"Logarithme naturel de ",[771,7227,7229,7242],{"className":7228},[774],[771,7230,7232],{"className":7231},[778],[780,7233,7234],{"xmlns":782},[784,7235,7236,7240],{},[787,7237,7238],{},[3695,7239,3697],{},[794,7241,3697],{"encoding":796},[771,7243,7245],{"className":7244,"ariaHidden":801},[800],[771,7246,7248,7251],{"className":7247},[805],[771,7249],{"className":7250,"style":7091},[809],[771,7252,3697],{"className":7253},[814,3746],[639,7255,7256,7264],{},[654,7257,7258,898,7261],{},[858,7259,7260],{},"math.cos(x)",[858,7262,7263],{},"math.sin(x)",[654,7265,7266],{},"Trigonométrie (argument en radians)",[1223,7268,7269],{},[850,7270,7272],{"className":852,"code":7271,"language":855,"meta":856,"style":856},"import math\n\n# Calculer l'aire d'un disque\nrayon = 5\naire = math.pi * rayon ** 2\nprint(f\"Aire d'un disque de rayon {rayon} : {aire:.2f}\")\n\n# Quelques calculs classiques\nprint(f\"sqrt(2)    = {math.sqrt(2):.4f}\")\nprint(f\"floor(3.7) = {math.floor(3.7)}\")\nprint(f\"ceil(3.2)  = {math.ceil(3.2)}\")\nprint(f\"5!         = {math.factorial(5)}\")\n",[858,7273,7274,7280,7284,7289,7299,7318,7351,7355,7360,7389,7416,7443],{"__ignoreMap":856},[771,7275,7276,7278],{"class":862,"line":863},[771,7277,1212],{"class":870},[771,7279,3806],{"class":866},[771,7281,7282],{"class":862,"line":878},[771,7283,1084],{"emptyLinePlaceholder":1083},[771,7285,7286],{"class":862,"line":907},[771,7287,7288],{"class":938},"# Calculer l'aire d'un disque\n",[771,7290,7291,7294,7296],{"class":862,"line":929},[771,7292,7293],{"class":866},"rayon ",[771,7295,871],{"class":870},[771,7297,7298],{"class":874}," 5\n",[771,7300,7301,7304,7306,7309,7311,7314,7316],{"class":862,"line":1062},[771,7302,7303],{"class":866},"aire ",[771,7305,871],{"class":870},[771,7307,7308],{"class":866}," math.pi ",[771,7310,923],{"class":870},[771,7312,7313],{"class":866}," rayon ",[771,7315,3852],{"class":870},[771,7317,2733],{"class":874},[771,7319,7320,7322,7324,7326,7329,7331,7333,7335,7337,7339,7342,7345,7347,7349],{"class":862,"line":1080},[771,7321,932],{"class":874},[771,7323,893],{"class":866},[771,7325,2742],{"class":870},[771,7327,7328],{"class":1250},"\"Aire d'un disque de rayon ",[771,7330,2748],{"class":874},[771,7332,3256],{"class":866},[771,7334,2753],{"class":874},[771,7336,4331],{"class":1250},[771,7338,2748],{"class":874},[771,7340,7341],{"class":866},"aire",[771,7343,7344],{"class":870},":.2f",[771,7346,2753],{"class":874},[771,7348,2766],{"class":1250},[771,7350,965],{"class":866},[771,7352,7353],{"class":862,"line":1087},[771,7354,1084],{"emptyLinePlaceholder":1083},[771,7356,7357],{"class":862,"line":1098},[771,7358,7359],{"class":938},"# Quelques calculs classiques\n",[771,7361,7362,7364,7366,7368,7371,7373,7375,7377,7380,7383,7385,7387],{"class":862,"line":1119},[771,7363,932],{"class":874},[771,7365,893],{"class":866},[771,7367,2742],{"class":870},[771,7369,7370],{"class":1250},"\"sqrt(2)    = ",[771,7372,2748],{"class":874},[771,7374,6588],{"class":866},[771,7376,3168],{"class":874},[771,7378,7379],{"class":866},")",[771,7381,7382],{"class":870},":.4f",[771,7384,2753],{"class":874},[771,7386,2766],{"class":1250},[771,7388,965],{"class":866},[771,7390,7391,7393,7395,7397,7400,7402,7405,7408,7410,7412,7414],{"class":862,"line":1125},[771,7392,932],{"class":874},[771,7394,893],{"class":866},[771,7396,2742],{"class":870},[771,7398,7399],{"class":1250},"\"floor(3.7) = ",[771,7401,2748],{"class":874},[771,7403,7404],{"class":866},"math.floor(",[771,7406,7407],{"class":874},"3.7",[771,7409,7379],{"class":866},[771,7411,2753],{"class":874},[771,7413,2766],{"class":1250},[771,7415,965],{"class":866},[771,7417,7418,7420,7422,7424,7427,7429,7432,7435,7437,7439,7441],{"class":862,"line":2326},[771,7419,932],{"class":874},[771,7421,893],{"class":866},[771,7423,2742],{"class":870},[771,7425,7426],{"class":1250},"\"ceil(3.2)  = ",[771,7428,2748],{"class":874},[771,7430,7431],{"class":866},"math.ceil(",[771,7433,7434],{"class":874},"3.2",[771,7436,7379],{"class":866},[771,7438,2753],{"class":874},[771,7440,2766],{"class":1250},[771,7442,965],{"class":866},[771,7444,7445,7447,7449,7451,7454,7456,7459,7461,7463,7465,7467],{"class":862,"line":2333},[771,7446,932],{"class":874},[771,7448,893],{"class":866},[771,7450,2742],{"class":870},[771,7452,7453],{"class":1250},"\"5!         = ",[771,7455,2748],{"class":874},[771,7457,7458],{"class":866},"math.factorial(",[771,7460,830],{"class":874},[771,7462,7379],{"class":866},[771,7464,2753],{"class":874},[771,7466,2766],{"class":1250},[771,7468,965],{"class":866},[599,7470,2037],{},[850,7472,7475],{"className":7473,"code":7474,"language":1281},[1279],"Aire d'un disque de rayon 5 : 78.54\nsqrt(2)    = 1.4142\nfloor(3.7) = 3\nceil(3.2)  = 4\n5!         = 120\n",[858,7476,7474],{"__ignoreMap":856},[594,7478,6882,7480],{"id":7479},"le-module-random",[858,7481,7482],{},"random",[599,7484,6882,7485,7487,7488,7491],{},[858,7486,7482],{}," permet de générer des ",[603,7489,7490],{},"nombres pseudo-aléatoires",".\nUtile pour simulations, jeux, échantillonnages.",[633,7493,7494,7502],{},[636,7495,7496],{},[639,7497,7498,7500],{},[642,7499,1395],{},[642,7501,6901],{},[649,7503,7504,7570,7690,7700,7713],{},[639,7505,7506,7511],{},[654,7507,7508],{},[858,7509,7510],{},"random.random()",[654,7512,7513,7514],{},"Un flottant aléatoire dans ",[771,7515,7517,7540],{"className":7516},[774],[771,7518,7520],{"className":7519},[778],[780,7521,7522],{"xmlns":782},[784,7523,7524,7537],{},[787,7525,7526,7529,7531,7533,7535],{},[6929,7527,7528],{"stretchy":7140},"[",[790,7530,4021],{},[6929,7532,3050],{"separator":801},[790,7534,792],{},[6929,7536,7528],{"stretchy":7140},[794,7538,7539],{"encoding":796},"[0, 1[",[771,7541,7543],{"className":7542,"ariaHidden":801},[800],[771,7544,7546,7550,7554,7557,7560,7564,7567],{"className":7545},[805],[771,7547],{"className":7548,"style":7549},[809],"height:1em;vertical-align:-0.25em;",[771,7551,7528],{"className":7552},[7553],"mopen",[771,7555,4021],{"className":7556},[814],[771,7558,3050],{"className":7559},[6980],[771,7561],{"className":7562,"style":7563},[6955],"margin-right:0.1667em;",[771,7565,792],{"className":7566},[814],[771,7568,7528],{"className":7569},[7553],[639,7571,7572,7577],{},[654,7573,7574],{},[858,7575,7576],{},"random.randint(a, b)",[654,7578,7579,7580,2098,7687,7379],{},"Un entier aléatoire dans ",[771,7581,7583,7618],{"className":7582},[774],[771,7584,7586],{"className":7585},[778],[780,7587,7588],{"xmlns":782},[784,7589,7590,7615],{},[787,7591,7592,7594,7596,7598,7600,7602,7604,7606,7609,7611,7613],{},[6929,7593,2748],{"stretchy":7140},[3695,7595,2464],{},[6929,7597,3050],{"separator":801},[3695,7599,2464],{},[6929,7601,918],{},[790,7603,792],{},[6929,7605,3050],{"separator":801},[6929,7607,7608],{},"…",[6929,7610,3050],{"separator":801},[3695,7612,2474],{},[6929,7614,2753],{"stretchy":7140},[794,7616,7617],{"encoding":796},"\\{a, a+1, \\dots, b\\}",[771,7619,7621,7653],{"className":7620,"ariaHidden":801},[800],[771,7622,7624,7627,7630,7633,7636,7639,7642,7646,7650],{"className":7623},[805],[771,7625],{"className":7626,"style":7549},[809],[771,7628,2748],{"className":7629},[7553],[771,7631,2464],{"className":7632},[814,3746],[771,7634,3050],{"className":7635},[6980],[771,7637],{"className":7638,"style":7563},[6955],[771,7640,2464],{"className":7641},[814,3746],[771,7643],{"className":7644,"style":7645},[6955],"margin-right:0.2222em;",[771,7647,918],{"className":7648},[7649],"mbin",[771,7651],{"className":7652,"style":7645},[6955],[771,7654,7656,7659,7662,7665,7668,7672,7675,7678,7681,7684],{"className":7655},[805],[771,7657],{"className":7658,"style":7549},[809],[771,7660,792],{"className":7661},[814],[771,7663,3050],{"className":7664},[6980],[771,7666],{"className":7667,"style":7563},[6955],[771,7669,7608],{"className":7670},[7671],"minner",[771,7673],{"className":7674,"style":7563},[6955],[771,7676,3050],{"className":7677},[6980],[771,7679],{"className":7680,"style":7563},[6955],[771,7682,2474],{"className":7683},[814,3746],[771,7685,2753],{"className":7686},[7161],[603,7688,7689],{},"bornes incluses",[639,7691,7692,7697],{},[654,7693,7694],{},[858,7695,7696],{},"random.choice(s)",[654,7698,7699],{},"Un élément aléatoire d'une séquence non vide",[639,7701,7702,7707],{},[654,7703,7704],{},[858,7705,7706],{},"random.shuffle(l)",[654,7708,7709,7710],{},"Mélange une liste ",[603,7711,7712],{},"sur place",[639,7714,7715,7720],{},[654,7716,7717],{},[858,7718,7719],{},"random.sample(s, k)",[654,7721,7722,7723,7726],{},"Échantillon de ",[858,7724,7725],{},"k"," éléments distincts",[1223,7728,7729],{},[850,7730,7732],{"className":852,"code":7731,"language":855,"meta":856,"style":856},"import random\n\n# Tirage simulant un dé à 6 faces\nde = random.randint(1, 6)\nprint(\"Dé :\", de)\n\n# Pile ou face\npiece = random.choice([\"Pile\", \"Face\"])\nprint(\"Pièce :\", piece)\n\n# Mélange d'un jeu de cartes simplifié\ncartes = [\"Roi\", \"Dame\", \"Valet\", \"10\"]\nrandom.shuffle(cartes)\nprint(\"Jeu mélangé :\", cartes)\n",[858,7733,7734,7741,7745,7750,7768,7780,7784,7789,7809,7821,7825,7830,7859,7864],{"__ignoreMap":856},[771,7735,7736,7738],{"class":862,"line":863},[771,7737,1212],{"class":870},[771,7739,7740],{"class":866}," random\n",[771,7742,7743],{"class":862,"line":878},[771,7744,1084],{"emptyLinePlaceholder":1083},[771,7746,7747],{"class":862,"line":907},[771,7748,7749],{"class":938},"# Tirage simulant un dé à 6 faces\n",[771,7751,7752,7755,7757,7760,7762,7764,7766],{"class":862,"line":929},[771,7753,7754],{"class":866},"de ",[771,7756,871],{"class":870},[771,7758,7759],{"class":866}," random.randint(",[771,7761,792],{"class":874},[771,7763,898],{"class":866},[771,7765,901],{"class":874},[771,7767,965],{"class":866},[771,7769,7770,7772,7774,7777],{"class":862,"line":1062},[771,7771,932],{"class":874},[771,7773,893],{"class":866},[771,7775,7776],{"class":1250},"\"Dé :\"",[771,7778,7779],{"class":866},", de)\n",[771,7781,7782],{"class":862,"line":1080},[771,7783,1084],{"emptyLinePlaceholder":1083},[771,7785,7786],{"class":862,"line":1087},[771,7787,7788],{"class":938},"# Pile ou face\n",[771,7790,7791,7794,7796,7799,7802,7804,7807],{"class":862,"line":1098},[771,7792,7793],{"class":866},"piece ",[771,7795,871],{"class":870},[771,7797,7798],{"class":866}," random.choice([",[771,7800,7801],{"class":1250},"\"Pile\"",[771,7803,898],{"class":866},[771,7805,7806],{"class":1250},"\"Face\"",[771,7808,1260],{"class":866},[771,7810,7811,7813,7815,7818],{"class":862,"line":1119},[771,7812,932],{"class":874},[771,7814,893],{"class":866},[771,7816,7817],{"class":1250},"\"Pièce :\"",[771,7819,7820],{"class":866},", piece)\n",[771,7822,7823],{"class":862,"line":1125},[771,7824,1084],{"emptyLinePlaceholder":1083},[771,7826,7827],{"class":862,"line":2326},[771,7828,7829],{"class":938},"# Mélange d'un jeu de cartes simplifié\n",[771,7831,7832,7835,7837,7839,7842,7844,7847,7849,7852,7854,7857],{"class":862,"line":2333},[771,7833,7834],{"class":866},"cartes ",[771,7836,871],{"class":870},[771,7838,5513],{"class":866},[771,7840,7841],{"class":1250},"\"Roi\"",[771,7843,898],{"class":866},[771,7845,7846],{"class":1250},"\"Dame\"",[771,7848,898],{"class":866},[771,7850,7851],{"class":1250},"\"Valet\"",[771,7853,898],{"class":866},[771,7855,7856],{"class":1250},"\"10\"",[771,7858,5529],{"class":866},[771,7860,7861],{"class":862,"line":2343},[771,7862,7863],{"class":866},"random.shuffle(cartes)\n",[771,7865,7866,7868,7870,7873],{"class":862,"line":2348},[771,7867,932],{"class":874},[771,7869,893],{"class":866},[771,7871,7872],{"class":1250},"\"Jeu mélangé :\"",[771,7874,7875],{"class":866},", cartes)\n",[599,7877,7878],{},"Sortie (variera car aléatoire) :",[850,7880,7883],{"className":7881,"code":7882,"language":1281},[1279],"Dé : 4\nPièce : Pile\nJeu mélangé : ['Valet', 'Roi', '10', 'Dame']\n",[858,7884,7882],{"__ignoreMap":856},[1439,7886,7887],{},[599,7888,7889,7892,7893,2098,7896,7899,7900,7903,7904,7907],{},[603,7890,7891],{},"Pseudo-aléatoire"," : les nombres produits sont calculés par un algorithme\ndéterministe à partir d'une ",[603,7894,7895],{},"graine",[714,7897,7898],{},"seed","). Avec\n",[858,7901,7902],{},"random.seed(42)",", vous obtenez ",[603,7905,7906],{},"la même suite"," à chaque exécution —\nutile pour reproduire un bug, à éviter pour un vrai tirage.",[594,7909,6882,7911],{"id":7910},"le-module-statistics",[858,7912,7913],{},"statistics",[599,7915,7916],{},"Pour les statistiques descriptives élémentaires : moyenne, médiane,\nécart-type.",[633,7918,7919,7927],{},[636,7920,7921],{},[639,7922,7923,7925],{},[642,7924,1395],{},[642,7926,6901],{},[649,7928,7929,7939,7949,7959,7969],{},[639,7930,7931,7936],{},[654,7932,7933],{},[858,7934,7935],{},"statistics.mean(data)",[654,7937,7938],{},"Moyenne arithmétique",[639,7940,7941,7946],{},[654,7942,7943],{},[858,7944,7945],{},"statistics.median(data)",[654,7947,7948],{},"Médiane",[639,7950,7951,7956],{},[654,7952,7953],{},[858,7954,7955],{},"statistics.mode(data)",[654,7957,7958],{},"Mode (valeur la plus fréquente)",[639,7960,7961,7966],{},[654,7962,7963],{},[858,7964,7965],{},"statistics.stdev(data)",[654,7967,7968],{},"Écart-type (échantillon)",[639,7970,7971,7976],{},[654,7972,7973],{},[858,7974,7975],{},"statistics.variance(data)",[654,7977,7978],{},"Variance (échantillon)",[1223,7980,7981],{},[850,7982,7984],{"className":852,"code":7983,"language":855,"meta":856,"style":856},"import statistics\n\nnotes = [10, 12, 14, 15, 8, 11, 13, 9, 16, 12]\n\nprint(f\"Moyenne   : {statistics.mean(notes)}\")\nprint(f\"Médiane   : {statistics.median(notes)}\")\nprint(f\"Écart-type: {statistics.stdev(notes):.2f}\")\nprint(f\"Mode      : {statistics.mode(notes)}\")\n",[858,7985,7986,7993,7997,8046,8050,8072,8094,8118],{"__ignoreMap":856},[771,7987,7988,7990],{"class":862,"line":863},[771,7989,1212],{"class":870},[771,7991,7992],{"class":866}," statistics\n",[771,7994,7995],{"class":862,"line":878},[771,7996,1084],{"emptyLinePlaceholder":1083},[771,7998,7999,8001,8003,8005,8007,8009,8011,8013,8015,8017,8019,8021,8023,8025,8027,8029,8032,8034,8036,8038,8040,8042,8044],{"class":862,"line":907},[771,8000,5508],{"class":866},[771,8002,871],{"class":870},[771,8004,5513],{"class":866},[771,8006,5539],{"class":874},[771,8008,898],{"class":866},[771,8010,5516],{"class":874},[771,8012,898],{"class":866},[771,8014,5526],{"class":874},[771,8016,898],{"class":866},[771,8018,5521],{"class":874},[771,8020,898],{"class":866},[771,8022,2515],{"class":874},[771,8024,898],{"class":866},[771,8026,2518],{"class":874},[771,8028,898],{"class":866},[771,8030,8031],{"class":874},"13",[771,8033,898],{"class":866},[771,8035,3550],{"class":874},[771,8037,898],{"class":866},[771,8039,6530],{"class":874},[771,8041,898],{"class":866},[771,8043,5516],{"class":874},[771,8045,5529],{"class":866},[771,8047,8048],{"class":862,"line":929},[771,8049,1084],{"emptyLinePlaceholder":1083},[771,8051,8052,8054,8056,8058,8061,8063,8066,8068,8070],{"class":862,"line":1062},[771,8053,932],{"class":874},[771,8055,893],{"class":866},[771,8057,2742],{"class":870},[771,8059,8060],{"class":1250},"\"Moyenne   : ",[771,8062,2748],{"class":874},[771,8064,8065],{"class":866},"statistics.mean(notes)",[771,8067,2753],{"class":874},[771,8069,2766],{"class":1250},[771,8071,965],{"class":866},[771,8073,8074,8076,8078,8080,8083,8085,8088,8090,8092],{"class":862,"line":1080},[771,8075,932],{"class":874},[771,8077,893],{"class":866},[771,8079,2742],{"class":870},[771,8081,8082],{"class":1250},"\"Médiane   : ",[771,8084,2748],{"class":874},[771,8086,8087],{"class":866},"statistics.median(notes)",[771,8089,2753],{"class":874},[771,8091,2766],{"class":1250},[771,8093,965],{"class":866},[771,8095,8096,8098,8100,8102,8105,8107,8110,8112,8114,8116],{"class":862,"line":1087},[771,8097,932],{"class":874},[771,8099,893],{"class":866},[771,8101,2742],{"class":870},[771,8103,8104],{"class":1250},"\"Écart-type: ",[771,8106,2748],{"class":874},[771,8108,8109],{"class":866},"statistics.stdev(notes)",[771,8111,7344],{"class":870},[771,8113,2753],{"class":874},[771,8115,2766],{"class":1250},[771,8117,965],{"class":866},[771,8119,8120,8122,8124,8126,8129,8131,8134,8136,8138],{"class":862,"line":1098},[771,8121,932],{"class":874},[771,8123,893],{"class":866},[771,8125,2742],{"class":870},[771,8127,8128],{"class":1250},"\"Mode      : ",[771,8130,2748],{"class":874},[771,8132,8133],{"class":866},"statistics.mode(notes)",[771,8135,2753],{"class":874},[771,8137,2766],{"class":1250},[771,8139,965],{"class":866},[599,8141,2037],{},[850,8143,8146],{"className":8144,"code":8145,"language":1281},[1279],"Moyenne   : 12\nMédiane   : 12.0\nÉcart-type: 2.54\nMode      : 12\n",[858,8147,8145],{"__ignoreMap":856},[599,8149,8150,8151,8154,8155,8158],{},"Remarquez que ",[858,8152,8153],{},"statistics.mean"," fait exactement ce que vous écririez à la\nmain avec ",[858,8156,8157],{},"sum(notes) \u002F len(notes)"," — mais avec en prime la gestion des\nlistes vides (lève une exception parlante).",[594,8160,8162],{"id":8161},"trois-bibliothèques-trois-usages-typiques","Trois bibliothèques, trois usages typiques",[8164,8165,8167],"card",{"icon":8166,"title":780},"i-lucide-square-pi",[599,8168,8169,8170,898,8172,3228],{},"Quand le calcul est mathématique : racine carrée, trigonométrie,\npuissances, constantes (",[858,8171,6751],{},[858,8173,7008],{},[8164,8175,8177],{"icon":8176,"title":7482},"i-lucide-dices",[599,8178,8179],{},"Quand il faut introduire du hasard : simulations, tirages, jeux,\nbrouillage d'une liste.",[8164,8181,8183],{"icon":8182,"title":7913},"i-lucide-chart-no-axes-column",[599,8184,8185],{},"Quand on a une liste de mesures : moyenne, médiane, dispersion.",[1137,8187,8189,8194],{"correct":792,"slug":8188},"bibliotheques-c2",[1141,8190,8191],{"v-slot:question":856},[599,8192,8193],{},"Quelle fonction tire un entier aléatoire entre 1 et 6 inclus ?",[1141,8195,8196],{"v-slot:choices":856},[730,8197,8198,8200,8203],{},[733,8199,7510],{},[733,8201,8202],{},"random.randint(1, 6)",[733,8204,8205],{},"random.choice(1, 6)",[594,8207,8209],{"id":8208},"conseils-méthodiques","Conseils méthodiques",[730,8211,8212,8220,8230],{},[733,8213,8214,8217,8218,1895],{},[603,8215,8216],{},"Ne réécrivez pas une fonction qui existe déjà"," dans la bibliothèque\nstandard. C'est l'objet même de l'item ",[616,8219],{"code":6460},[733,8221,8222,8225,8226,8229],{},[603,8223,8224],{},"Citez la doc"," quand vous utilisez une fonction non-évidente : un\ncommentaire ",[858,8227,8228],{},"# voir docs.python.org math.gcd"," aide la relecture.",[733,8231,8232,8235],{},[603,8233,8234],{},"Importez en tête de fichier",", pas au milieu du code. C'est une\nconvention universelle en Python.",[594,8237,1437],{"id":1436},[1439,8239,8240],{},[730,8241,8242,8255,8296,8313,8319],{},[733,8243,8244,1901,8246,1901,8249,8251,8252,8254],{},[858,8245,7576],{},[603,8247,8248],{},"inclut",[858,8250,2474],{},". Contrairement à ",[858,8253,2460],{}," qui\nl'exclut.",[733,8256,8257,8259,8260,8263,8264,8292,8293,1895],{},[858,8258,7222],{}," est le ",[603,8261,8262],{},"logarithme naturel"," (base ",[771,8265,8267,8280],{"className":8266},[774],[771,8268,8270],{"className":8269},[778],[780,8271,8272],{"xmlns":782},[784,8273,8274,8278],{},[787,8275,8276],{},[3695,8277,7008],{},[794,8279,7008],{"encoding":796},[771,8281,8283],{"className":8282,"ariaHidden":801},[800],[771,8284,8286,8289],{"className":8285},[805],[771,8287],{"className":8288,"style":7091},[809],[771,8290,7008],{"className":8291},[814,3746],"), pas le log\ndécimal. Pour le log décimal : ",[858,8294,8295],{},"math.log10(x)",[733,8297,8298,8299,2875,8302,8305,8306,8309,8310,1895],{},"Les angles de ",[858,8300,8301],{},"math.cos",[858,8303,8304],{},"math.sin"," sont en ",[603,8307,8308],{},"radians",", pas en\ndegrés. Pour convertir : ",[858,8311,8312],{},"math.radians(deg)",[733,8314,8315,8318],{},[858,8316,8317],{},"statistics.mean([])"," lève une exception. Penser à vérifier la liste\nd'abord, ou attraper l'exception.",[733,8320,8321,8323],{},[858,8322,6735],{}," : à proscrire — masque l'origine des noms.",[594,8325,1462],{"id":1461},[599,8327,8328,8329,8332,8333,4331,8336,8339,8340,8343,8344,8347,8348,8351,8352,1895],{},"Au-delà de la bibliothèque ",[603,8330,8331],{},"standard",", Python dispose d'un écosystème\ngigantesque de bibliothèques ",[603,8334,8335],{},"tierces",[858,8337,8338],{},"numpy"," pour le calcul\nscientifique, ",[858,8341,8342],{},"matplotlib"," pour les graphiques, ",[858,8345,8346],{},"requests"," pour le Web,\n",[858,8349,8350],{},"pandas"," pour les tableaux de données. La démarche reste la même :\n",[603,8353,8354],{},"lire la doc, importer, utiliser",[1474,8356,8357],{},"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 .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);}html pre.shiki code .sIIMD, html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":856,"searchDepth":878,"depth":878,"links":8359},[8360,8361,8364,8365,8367,8369,8371,8372,8373,8374],{"id":596,"depth":878,"text":597},{"id":6499,"depth":878,"text":6500,"children":8362},[8363],{"id":6566,"depth":907,"text":6567},{"id":6766,"depth":878,"text":6767},{"id":6881,"depth":878,"text":8366},"Le module math",{"id":7479,"depth":878,"text":8368},"Le module random",{"id":7910,"depth":878,"text":8370},"Le module statistics",{"id":8161,"depth":878,"text":8162},{"id":8208,"depth":878,"text":8209},{"id":1436,"depth":878,"text":1437},{"id":1461,"depth":878,"text":1462},"Importer un module Python, lire une documentation et mobiliser math, random et statistics.",{},[8378,8381],{"slug":6743,"kind":1492,"question":8379,"choices":8380,"correct":792,"multi":1494,"explanation":856},"Quel import permet d'écrire directement pi (sans préfixe) dans le code ?",[3665,6761,6716],{"slug":8188,"kind":1492,"question":8193,"choices":8382,"correct":792,"multi":1494,"explanation":856},[7510,8202,8205],{"title":407,"description":8375},"FcdOKqj6VJsO4BaweHH1SmUqFJ0TEmHxIcJYiQ46Uy0",{"id":8386,"title":381,"bo":1487,"body":8387,"description":8508,"eval":1487,"extension":1488,"labo":1487,"meta":8509,"navigation":1083,"path":382,"quizzes":8511,"readingTime":863,"seo":8512,"stem":383,"tp":1487,"__hash__":8513},"cours\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F0.index.md",{"type":591,"value":8388,"toc":8504},[8389,8393,8414,8441,8445,8501],[594,8390,8392],{"id":8391},"au-programme","Au programme",[599,8394,8395,8396,8399,8400,3646,8403,898,8406,8409,8410,8413],{},"Programmer, ce n'est pas seulement « savoir taper du code Python ». C'est\nd'abord comprendre ce qu'est un ",[603,8397,8398],{},"langage de programmation",", pourquoi il en\nexiste des dizaines, et quelles constructions fondamentales se retrouvent dans\npresque tous. C'est ensuite produire des programmes ",[603,8401,8402],{},"lisibles",[603,8404,8405],{},"spécifiés",[603,8407,8408],{},"testés",", et savoir aller chercher dans les ",[603,8411,8412],{},"bibliothèques","\nle code qu'on n'a pas besoin de réécrire.",[599,8415,8416,8417,8420,8421,8424,8425,8427,8428,8430,8431,8434,8435,8437,8438,8440],{},"Vous découvrirez d'abord la ",[603,8418,8419],{},"diversité des langages"," et les grands\nparadigmes (impératif, fonctionnel, objet), avant de revoir et formaliser les\n",[603,8422,8423],{},"constructions élémentaires"," : variables, types, expressions, instructions,\nconditionnelles, boucles bornées et non bornées. Vous approfondirez ensuite la\nnotion de ",[603,8426,2930],{}," comme brique de structuration, puis la\n",[603,8429,4390],{}," d'une fonction par préconditions, postconditions et\ndocstring. Vous apprendrez à ",[603,8432,8433],{},"mettre au point"," un programme par une\ndémarche de tests et d'",[858,8436,4851],{},", et enfin à ",[603,8439,6478],{},"\nstandard de Python pour ne pas réinventer la roue.",[594,8442,8444],{"id":8443},"plan-du-chapitre","Plan du chapitre",[3626,8446,8447,8455,8462,8469,8477,8486],{},[733,8448,8449,8452,8453],{},[603,8450,8451],{},"Diversité et unité des langages"," — typologie, paradigmes, compilation vs interprétation. ",[616,8454],{"code":589},[733,8456,8457,8459,8460],{},[603,8458,391],{}," — variables, types, expressions, conditionnelles, boucles. ",[616,8461],{"code":1502},[733,8463,8464,8466,8467],{},[603,8465,395],{}," — définition, appel, paramètres, valeur de retour. ",[616,8468],{"code":1502},[733,8470,8471,8474,8475],{},[603,8472,8473],{},"Spécification"," — précondition, postcondition, signature, docstring. ",[616,8476],{"code":4393},[733,8478,8479,8481,8482,614,8484],{},[603,8480,403],{}," — bugs, débogage, jeux de tests, ",[858,8483,4851],{},[616,8485],{"code":5327},[733,8487,8488,8490,8491,898,8493,898,8495,898,8497,614,8499],{},[603,8489,407],{}," — ",[858,8492,1212],{},[858,8494,780],{},[858,8496,7482],{},[858,8498,7913],{},[616,8500],{"code":6460},[599,8502,8503],{},"À la fin du chapitre, vous saurez lire et écrire un programme Python clair,\nle documenter par une spécification, le tester avec un jeu de cas\nreprésentatifs, et l'enrichir en mobilisant les modules de la bibliothèque\nstandard.",{"title":856,"searchDepth":878,"depth":878,"links":8505},[8506,8507],{"id":8391,"depth":878,"text":8392},{"id":8443,"depth":878,"text":8444},"Du choix d'un langage aux bonnes pratiques de programmation — variables, fonctions, spécification, débogage et bibliothèques en Python.",{"icon":8510},"i-lucide-code-2",[],{"title":381,"description":8508},"og-vMcn8ohfoywqknYAJisYEKhHR_L1xkWMhzHliKw4",[8515,8774,9269,9532,9781,10053,10397],{"id":8516,"title":8517,"bo":8518,"body":8519,"description":8767,"eval":1487,"extension":1488,"labo":1487,"meta":8768,"navigation":1494,"path":8769,"quizzes":8770,"readingTime":863,"seo":8771,"stem":8772,"tp":1487,"__hash__":8773},"coursMemo\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F1.diversite-langages.memo.md","Diversité et unité des langages — l'essentiel",[589],{"type":591,"value":8520,"toc":8760},[8521,8525,8532,8536,8573,8577,8644,8646,8657,8661,8757],[594,8522,8524],{"id":8523},"en-une-phrase","En une phrase",[599,8526,8527,8528,8531],{},"Il existe des centaines de langages, chacun optimisé pour un compromis\ndifférent — mais ",[603,8529,8530],{},"presque tous reposent sur les mêmes constructions"," :\naffectation, conditionnelle, boucles, fonction.",[594,8533,8535],{"id":8534},"à-mémoriser","À mémoriser",[730,8537,8538,8543,8555,8560,8565,8570],{},[733,8539,724,8540,8542],{},[603,8541,727],{}," = une grande façon de concevoir un programme.",[733,8544,8545,8546,898,8549,898,8552,1895],{},"Trois paradigmes phares : ",[603,8547,8548],{},"impératif",[603,8550,8551],{},"fonctionnel",[603,8553,8554],{},"objet",[733,8556,8557,8558,1895],{},"Python est ",[603,8559,768],{},[733,8561,8562,8564],{},[603,8563,1179],{}," : traduction préalable en code machine (C, Rust). Rapide à\nl'exécution.",[733,8566,8567,8569],{},[603,8568,1193],{}," : exécution ligne par ligne (Python, JavaScript).\nImmédiat à essayer.",[733,8571,8572],{},"Briques universelles : affectation, conditionnelle, boucle bornée, boucle\nnon bornée, fonction.",[594,8574,8576],{"id":8575},"à-savoir-reconnaître","À savoir reconnaître",[633,8578,8579,8588],{},[636,8580,8581],{},[639,8582,8583,8585],{},[642,8584,2806],{},[642,8586,8587],{},"Identifier",[649,8589,8590,8604,8616,8628,8636],{},[639,8591,8592,8602],{},[654,8593,8594,8597,8598,8601],{},[858,8595,8596],{},"for i in range(n):"," (Python) ≈ ",[858,8599,8600],{},"for (int i=0; i\u003Cn; i++)"," (C)",[654,8603,1365],{},[639,8605,8606,8614],{},[654,8607,8608,8597,8611,8601],{},[858,8609,8610],{},"while cond:",[858,8612,8613],{},"while (cond) { … }",[654,8615,1380],{},[639,8617,8618,8625],{},[654,8619,8620,8622,8623],{},[858,8621,1400],{}," ≈ ",[858,8624,1405],{},[654,8626,8627],{},"Définition de fonction",[639,8629,8630,8633],{},[654,8631,8632],{},"Programme traduit avant exécution",[654,8634,8635],{},"Langage compilé",[639,8637,8638,8641],{},[654,8639,8640],{},"Programme exécuté ligne par ligne",[654,8642,8643],{},"Langage interprété",[594,8645,1437],{"id":1436},[730,8647,8648,8651,8654],{},[733,8649,8650],{},"Aucun langage n'est universellement « meilleur ».",[733,8652,8653],{},"Compilé ≠ rapide automatiquement (l'algorithme compte d'abord).",[733,8655,8656],{},"Python est interprété pour vous, mais utilise en interne un bytecode.",[594,8658,8660],{"id":8659},"syntaxe-python","Syntaxe Python",[850,8662,8664],{"className":852,"code":8663,"language":855,"meta":856,"style":856},"# Style impératif : modifier un état\ntotal = 0\nfor i in range(1, 6):\n    total += i * i\n\n# Style fonctionnel : composer des fonctions\ntotal = sum(map(lambda n: n * n, range(1, 6)))\n",[858,8665,8666,8671,8679,8699,8711,8715,8720],{"__ignoreMap":856},[771,8667,8668],{"class":862,"line":863},[771,8669,8670],{"class":938},"# Style impératif : modifier un état\n",[771,8672,8673,8675,8677],{"class":862,"line":878},[771,8674,867],{"class":866},[771,8676,871],{"class":870},[771,8678,875],{"class":874},[771,8680,8681,8683,8685,8687,8689,8691,8693,8695,8697],{"class":862,"line":907},[771,8682,881],{"class":870},[771,8684,884],{"class":866},[771,8686,887],{"class":870},[771,8688,890],{"class":874},[771,8690,893],{"class":866},[771,8692,792],{"class":874},[771,8694,898],{"class":866},[771,8696,901],{"class":874},[771,8698,904],{"class":866},[771,8700,8701,8703,8705,8707,8709],{"class":862,"line":929},[771,8702,910],{"class":866},[771,8704,1069],{"class":870},[771,8706,884],{"class":866},[771,8708,923],{"class":870},[771,8710,926],{"class":866},[771,8712,8713],{"class":862,"line":1062},[771,8714,1084],{"emptyLinePlaceholder":1083},[771,8716,8717],{"class":862,"line":1080},[771,8718,8719],{"class":938},"# Style fonctionnel : composer des fonctions\n",[771,8721,8722,8724,8726,8728,8730,8733,8735,8737,8739,8741,8744,8746,8748,8750,8752,8754],{"class":862,"line":1087},[771,8723,867],{"class":866},[771,8725,871],{"class":870},[771,8727,997],{"class":874},[771,8729,893],{"class":866},[771,8731,8732],{"class":874},"map",[771,8734,893],{"class":866},[771,8736,980],{"class":870},[771,8738,983],{"class":866},[771,8740,923],{"class":870},[771,8742,8743],{"class":866}," n, ",[771,8745,2819],{"class":874},[771,8747,893],{"class":866},[771,8749,792],{"class":874},[771,8751,898],{"class":866},[771,8753,901],{"class":874},[771,8755,8756],{"class":866},")))\n",[1474,8758,8759],{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sxrX7, html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s8jYJ, html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sBjJW, html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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":856,"searchDepth":878,"depth":878,"links":8761},[8762,8763,8764,8765,8766],{"id":8523,"depth":878,"text":8524},{"id":8534,"depth":878,"text":8535},{"id":8575,"depth":878,"text":8576},{"id":1436,"depth":878,"text":1437},{"id":8659,"depth":878,"text":8660},"Mémo de révision sur les paradigmes, la compilation et les briques universelles des langages.",{},"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fdiversite-langages.memo",[],{"title":8517,"description":8767},"1.nsi-1ere\u002Fpg-langages-prog\u002F1.diversite-langages.memo","rjRnJO_FDYxLjXh7i_K7QxFu4i1cv9hAXmb_M4ZhlDA",{"id":8775,"title":8776,"bo":8777,"body":8778,"description":9262,"eval":1487,"extension":1488,"labo":1487,"meta":9263,"navigation":1494,"path":9264,"quizzes":9265,"readingTime":863,"seo":9266,"stem":9267,"tp":1487,"__hash__":9268},"coursMemo\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F2.constructions-elementaires.memo.md","Constructions élémentaires — l'essentiel",[1502],{"type":591,"value":8779,"toc":9255},[8780,8782,8802,8804,8996,8998,9080,9082,9117,9119,9252],[594,8781,8524],{"id":8523},[599,8783,8784,8785,3646,8787,898,8789,898,8791,2875,8793,8796,8797,8799,8800,3228],{},"Cinq briques élémentaires structurent un programme : ",[603,8786,1556],{},[603,8788,1877],{},[603,8790,2053],{},[603,8792,2141],{},[603,8794,8795],{},"boucle"," (bornée ",[858,8798,881],{},"\nou non bornée ",[858,8801,2569],{},[594,8803,8535],{"id":8534},[730,8805,8806,8814,8826,8836,8846,8857,8867],{},[733,8807,8808,8811,8812,1895],{},[603,8809,8810],{},"Variable"," : nom associé à une valeur en mémoire. Affectation avec ",[858,8813,871],{},[733,8815,8816,4331,8818,898,8820,898,8822,898,8824,1895],{},[603,8817,1664],{},[858,8819,1695],{},[858,8821,1713],{},[858,8823,1731],{},[858,8825,1746],{},[733,8827,8828,8831,8832,8835],{},[603,8829,8830],{},"Expression"," : produit une valeur. ",[603,8833,8834],{},"Instruction"," : effectue une action.",[733,8837,8838,4331,8840,898,8843,8845],{},[603,8839,1350],{},[858,8841,8842],{},"if … elif … else",[858,8844,2366],{}," final, indentation du bloc.",[733,8847,8848,8852,8853,8856],{},[603,8849,8850],{},[858,8851,881],{}," : boucle ",[603,8854,8855],{},"bornée",", nombre d'itérations connu à l'avance.",[733,8858,8859,8852,8863,8866],{},[603,8860,8861],{},[858,8862,2569],{},[603,8864,8865],{},"non bornée",", tourne tant qu'une condition est vraie.",[733,8868,8869,8873,8874,8992,8993,8995],{},[603,8870,8871],{},[858,8872,2460],{}," : produit les entiers ",[771,8875,8877,8912],{"className":8876},[774],[771,8878,8880],{"className":8879},[778],[780,8881,8882],{"xmlns":782},[784,8883,8884,8909],{},[787,8885,8886,8888,8890,8892,8894,8896,8898,8900,8902,8904,8907],{},[3695,8887,2464],{},[6929,8889,3050],{"separator":801},[3695,8891,2464],{},[6929,8893,918],{},[790,8895,792],{},[6929,8897,3050],{"separator":801},[6929,8899,7608],{},[6929,8901,3050],{"separator":801},[3695,8903,2474],{},[6929,8905,8906],{},"−",[790,8908,792],{},[794,8910,8911],{"encoding":796},"a, a+1, \\dots, b-1",[771,8913,8915,8943,8983],{"className":8914,"ariaHidden":801},[800],[771,8916,8918,8922,8925,8928,8931,8934,8937,8940],{"className":8917},[805],[771,8919],{"className":8920,"style":8921},[809],"height:0.7778em;vertical-align:-0.1944em;",[771,8923,2464],{"className":8924},[814,3746],[771,8926,3050],{"className":8927},[6980],[771,8929],{"className":8930,"style":7563},[6955],[771,8932,2464],{"className":8933},[814,3746],[771,8935],{"className":8936,"style":7645},[6955],[771,8938,918],{"className":8939},[7649],[771,8941],{"className":8942,"style":7645},[6955],[771,8944,8946,8950,8953,8956,8959,8962,8965,8968,8971,8974,8977,8980],{"className":8945},[805],[771,8947],{"className":8948,"style":8949},[809],"height:0.8889em;vertical-align:-0.1944em;",[771,8951,792],{"className":8952},[814],[771,8954,3050],{"className":8955},[6980],[771,8957],{"className":8958,"style":7563},[6955],[771,8960,7608],{"className":8961},[7671],[771,8963],{"className":8964,"style":7563},[6955],[771,8966,3050],{"className":8967},[6980],[771,8969],{"className":8970,"style":7563},[6955],[771,8972,2474],{"className":8973},[814,3746],[771,8975],{"className":8976,"style":7645},[6955],[771,8978,8906],{"className":8979},[7649],[771,8981],{"className":8982,"style":7645},[6955],[771,8984,8986,8989],{"className":8985},[805],[771,8987],{"className":8988,"style":810},[809],[771,8990,792],{"className":8991},[814],". La borne ",[858,8994,2474],{},"\nest exclue.",[594,8997,8576],{"id":8575},[633,8999,9000,9008],{},[636,9001,9002],{},[639,9003,9004,9006],{},[642,9005,2806],{},[642,9007,1323],{},[649,9009,9010,9020,9059,9068],{},[639,9011,9012,9015],{},[654,9013,9014],{},"« Pour chaque élément d'une liste »",[654,9016,9017],{},[858,9018,9019],{},"for x in liste:",[639,9021,9022,9054],{},[654,9023,9024,9025,9053],{},"« Répéter ",[771,9026,9028,9041],{"className":9027},[774],[771,9029,9031],{"className":9030},[778],[780,9032,9033],{"xmlns":782},[784,9034,9035,9039],{},[787,9036,9037],{},[3695,9038,2665],{},[794,9040,2665],{"encoding":796},[771,9042,9044],{"className":9043,"ariaHidden":801},[800],[771,9045,9047,9050],{"className":9046},[805],[771,9048],{"className":9049,"style":7091},[809],[771,9051,2665],{"className":9052},[814,3746]," fois »",[654,9055,9056],{},[858,9057,9058],{},"for _ in range(n):",[639,9060,9061,9064],{},[654,9062,9063],{},"« Tant que la condition est vraie »",[654,9065,9066],{},[858,9067,1385],{},[639,9069,9070,9076],{},[654,9071,9072,9073,9075],{},"« Selon la valeur de ",[858,9074,704],{},", afficher la mention »",[654,9077,9078],{},[858,9079,8842],{},[594,9081,1437],{"id":1436},[730,9083,9084,9091,9102,9114],{},[733,9085,9086,9088,9089,1631],{},[858,9087,871],{}," (affectation) ≠ ",[858,9090,1630],{},[733,9092,9093,9095,9096,9099,9100,1895],{},[858,9094,2484],{}," donne ",[858,9097,9098],{},"0,1,2,3,4"," — pas ",[858,9101,830],{},[733,9103,9104,9105,9107,9108,9111,9112,1895],{},"Bloc oublié : pas de ",[858,9106,2366],{}," ou pas d'indentation → ",[858,9109,9110],{},"SyntaxError"," \u002F\n",[858,9113,2915],{},[733,9115,9116],{},"Variable de boucle qui ne progresse pas → boucle infinie.",[594,9118,8660],{"id":8659},[850,9120,9122],{"className":852,"code":9121,"language":855,"meta":856,"style":856},"# Conditionnelle\nif note >= 10:\n    print(\"Admis\")\nelse:\n    print(\"Refusé\")\n\n# Boucle bornée\nfor i in range(1, 6):\n    print(i * i)\n\n# Boucle non bornée\nn = 10\nwhile n > 0:\n    print(n)\n    n -= 1\n",[858,9123,9124,9129,9141,9151,9157,9167,9171,9176,9196,9207,9211,9216,9225,9237,9243],{"__ignoreMap":856},[771,9125,9126],{"class":862,"line":863},[771,9127,9128],{"class":938},"# Conditionnelle\n",[771,9130,9131,9133,9135,9137,9139],{"class":862,"line":878},[771,9132,2170],{"class":870},[771,9134,2173],{"class":866},[771,9136,2176],{"class":870},[771,9138,2179],{"class":874},[771,9140,1026],{"class":866},[771,9142,9143,9145,9147,9149],{"class":862,"line":907},[771,9144,2186],{"class":874},[771,9146,893],{"class":866},[771,9148,2191],{"class":1250},[771,9150,965],{"class":866},[771,9152,9153,9155],{"class":862,"line":929},[771,9154,2198],{"class":870},[771,9156,1026],{"class":866},[771,9158,9159,9161,9163,9165],{"class":862,"line":1062},[771,9160,2186],{"class":874},[771,9162,893],{"class":866},[771,9164,2209],{"class":1250},[771,9166,965],{"class":866},[771,9168,9169],{"class":862,"line":1080},[771,9170,1084],{"emptyLinePlaceholder":1083},[771,9172,9173],{"class":862,"line":1087},[771,9174,9175],{"class":938},"# Boucle bornée\n",[771,9177,9178,9180,9182,9184,9186,9188,9190,9192,9194],{"class":862,"line":1098},[771,9179,881],{"class":870},[771,9181,884],{"class":866},[771,9183,887],{"class":870},[771,9185,890],{"class":874},[771,9187,893],{"class":866},[771,9189,792],{"class":874},[771,9191,898],{"class":866},[771,9193,901],{"class":874},[771,9195,904],{"class":866},[771,9197,9198,9200,9203,9205],{"class":862,"line":1119},[771,9199,2186],{"class":874},[771,9201,9202],{"class":866},"(i ",[771,9204,923],{"class":870},[771,9206,2446],{"class":866},[771,9208,9209],{"class":862,"line":1125},[771,9210,1084],{"emptyLinePlaceholder":1083},[771,9212,9213],{"class":862,"line":2326},[771,9214,9215],{"class":938},"# Boucle non bornée\n",[771,9217,9218,9220,9222],{"class":862,"line":2333},[771,9219,2594],{"class":866},[771,9221,871],{"class":870},[771,9223,9224],{"class":874}," 10\n",[771,9226,9227,9229,9231,9233,9235],{"class":862,"line":2343},[771,9228,2569],{"class":870},[771,9230,1072],{"class":866},[771,9232,2026],{"class":870},[771,9234,2610],{"class":874},[771,9236,1026],{"class":866},[771,9238,9239,9241],{"class":862,"line":2348},[771,9240,2186],{"class":874},[771,9242,2619],{"class":866},[771,9244,9245,9247,9250],{"class":862,"line":5098},[771,9246,2624],{"class":866},[771,9248,9249],{"class":870},"-=",[771,9251,2634],{"class":874},[1474,9253,9254],{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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);}",{"title":856,"searchDepth":878,"depth":878,"links":9256},[9257,9258,9259,9260,9261],{"id":8523,"depth":878,"text":8524},{"id":8534,"depth":878,"text":8535},{"id":8575,"depth":878,"text":8576},{"id":1436,"depth":878,"text":1437},{"id":8659,"depth":878,"text":8660},"Mémo de révision sur variables, types, expressions, conditionnelles et boucles.",{},"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fconstructions-elementaires.memo",[],{"title":8776,"description":9262},"1.nsi-1ere\u002Fpg-langages-prog\u002F2.constructions-elementaires.memo","3t_GPa4Li-3Ayg-fbxRVcCoWiEUQJhX6V4e2VLrSUbQ",{"id":9270,"title":9271,"bo":9272,"body":9273,"description":9525,"eval":1487,"extension":1488,"labo":1487,"meta":9526,"navigation":1494,"path":9527,"quizzes":9528,"readingTime":863,"seo":9529,"stem":9530,"tp":1487,"__hash__":9531},"coursMemo\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F3.fonctions.memo.md","Fonctions — l'essentiel",[1502],{"type":591,"value":9274,"toc":9518},[9275,9277,9289,9291,9337,9339,9388,9390,9426,9428,9515],[594,9276,8524],{"id":8523},[599,9278,1549,9279,9281,9282,9284,9285,9288],{},[603,9280,2930],{}," est un bloc de code nommé, qui prend des ",[603,9283,5173],{}," et\npeut ",[603,9286,9287],{},"retourner"," une valeur — pour réutiliser, nommer et isoler un calcul.",[594,9290,8535],{"id":8534},[730,9292,9293,9300,9307,9315,9320,9328],{},[733,9294,9295,9296,9299],{},"Définir : ",[858,9297,9298],{},"def nom(p1, p2):"," + corps indenté.",[733,9301,9302,9303,9306],{},"Appeler : ",[858,9304,9305],{},"nom(arg1, arg2)"," à n'importe quel endroit du programme.",[733,9308,9309,9311,9312,9314],{},[603,9310,3220],{}," = nom dans la définition. ",[603,9313,3233],{}," = valeur à l'appel.",[733,9316,9317,9319],{},[858,9318,3074],{}," termine la fonction et renvoie une valeur.",[733,9321,9322,9323,9325,9326,1895],{},"Sans ",[858,9324,3074],{},", la fonction renvoie ",[858,9327,3424],{},[733,9329,9330,9331,4331,9334,1895],{},"Plusieurs valeurs de retour via un ",[603,9332,9333],{},"tuple",[858,9335,9336],{},"return q, r",[594,9338,8576],{"id":8575},[633,9340,9341,9350],{},[636,9342,9343],{},[639,9344,9345,9347],{},[642,9346,2806],{},[642,9348,9349],{},"Action",[649,9351,9352,9360,9370,9380],{},[639,9353,9354,9357],{},[654,9355,9356],{},"Même calcul utilisé plusieurs fois",[654,9358,9359],{},"Le mettre dans une fonction",[639,9361,9362,9365],{},[654,9363,9364],{},"Fonction qui doit renvoyer un résultat",[654,9366,9367,9368],{},"Utiliser ",[858,9369,3074],{},[639,9371,9372,9375],{},[654,9373,9374],{},"Fonction qui doit juste afficher",[654,9376,9367,9377,9379],{},[858,9378,932],{}," (effet de bord)",[639,9381,9382,9385],{},[654,9383,9384],{},"Variables internes à une fonction",[654,9386,9387],{},"Elles disparaissent à la sortie",[594,9389,1437],{"id":1436},[730,9391,9392,9403,9413,9420],{},[733,9393,9394,9396,9397,4331,9399,9402],{},[603,9395,3084],{}," ≠ ",[603,9398,3088],{},[858,9400,9401],{},"def f(): ..."," ne s'exécute pas tout seul.",[733,9404,9405,9396,9407,9409,9410,9412],{},[858,9406,932],{},[858,9408,3074],{}," — utilisez ",[858,9411,3074],{}," pour transmettre une valeur.",[733,9414,4343,9415,9417,9418,1895],{},[858,9416,3074],{}," → la fonction renvoie ",[858,9419,3424],{},[733,9421,9422,9423,1895],{},"Variable locale lue depuis l'extérieur → ",[858,9424,9425],{},"NameError",[594,9427,8660],{"id":8659},[850,9429,9431],{"className":852,"code":9430,"language":855,"meta":856,"style":856},"def carre(n):\n    return n * n\n\ndef division_euclidienne(a, b):\n    return a \u002F\u002F b, a % b\n\nprint(carre(5))                         # 25\nq, r = division_euclidienne(17, 5)      # 3, 2\n",[858,9432,9433,9441,9451,9455,9463,9478,9482,9495],{"__ignoreMap":856},[771,9434,9435,9437,9439],{"class":862,"line":863},[771,9436,3000],{"class":870},[771,9438,3024],{"class":1022},[771,9440,3027],{"class":866},[771,9442,9443,9445,9447,9449],{"class":862,"line":878},[771,9444,3032],{"class":870},[771,9446,1072],{"class":866},[771,9448,923],{"class":870},[771,9450,1077],{"class":866},[771,9452,9453],{"class":862,"line":907},[771,9454,1084],{"emptyLinePlaceholder":1083},[771,9456,9457,9459,9461],{"class":862,"line":929},[771,9458,3000],{"class":870},[771,9460,4224],{"class":1022},[771,9462,3294],{"class":866},[771,9464,9465,9467,9469,9471,9474,9476],{"class":862,"line":1062},[771,9466,3032],{"class":870},[771,9468,3301],{"class":866},[771,9470,4238],{"class":870},[771,9472,9473],{"class":866}," b, a ",[771,9475,2709],{"class":870},[771,9477,3306],{"class":866},[771,9479,9480],{"class":862,"line":1080},[771,9481,1084],{"emptyLinePlaceholder":1083},[771,9483,9484,9486,9488,9490,9493],{"class":862,"line":1087},[771,9485,932],{"class":874},[771,9487,3150],{"class":866},[771,9489,830],{"class":874},[771,9491,9492],{"class":866},"))                         ",[771,9494,3143],{"class":938},[771,9496,9497,9499,9501,9503,9505,9507,9509,9512],{"class":862,"line":1098},[771,9498,4269],{"class":866},[771,9500,871],{"class":870},[771,9502,4274],{"class":866},[771,9504,4277],{"class":874},[771,9506,898],{"class":866},[771,9508,830],{"class":874},[771,9510,9511],{"class":866},")      ",[771,9513,9514],{"class":938},"# 3, 2\n",[1474,9516,9517],{},"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 .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":856,"searchDepth":878,"depth":878,"links":9519},[9520,9521,9522,9523,9524],{"id":8523,"depth":878,"text":8524},{"id":8534,"depth":878,"text":8535},{"id":8575,"depth":878,"text":8576},{"id":1436,"depth":878,"text":1437},{"id":8659,"depth":878,"text":8660},"Mémo de révision sur la définition, l'appel, paramètres et valeur de retour.",{},"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Ffonctions.memo",[],{"title":9271,"description":9525},"1.nsi-1ere\u002Fpg-langages-prog\u002F3.fonctions.memo","PHlN8ovyDWYeIT3zNRxDRTuCNscJN0Ti00x6rBsCcIM",{"id":9533,"title":9534,"bo":9535,"body":9536,"description":9774,"eval":1487,"extension":1488,"labo":1487,"meta":9775,"navigation":1494,"path":9776,"quizzes":9777,"readingTime":863,"seo":9778,"stem":9779,"tp":1487,"__hash__":9780},"coursMemo\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F4.specification.memo.md","Spécification d'une fonction — l'essentiel",[4393],{"type":591,"value":9537,"toc":9767},[9538,9540,9552,9554,9605,9607,9657,9659,9679,9681,9764],[594,9539,8524],{"id":8523},[599,9541,9542,9545,9546,9548,9549,9551],{},[603,9543,9544],{},"Spécifier"," une fonction, c'est dire ce qu'elle attend (",[603,9547,4575],{},")\net ce qu'elle garantit (",[603,9550,4581],{},") — par sa signature, sa docstring\net éventuellement une assertion.",[594,9553,8535],{"id":8534},[730,9555,9556,9562,9567,9576,9594],{},[733,9557,9558,9561],{},[603,9559,9560],{},"Signature"," : nom + types des paramètres + type de retour.",[733,9563,9564,9566],{},[603,9565,4598],{}," : condition que doivent satisfaire les arguments.",[733,9568,9569,9571,9572,9575],{},[603,9570,4607],{}," : condition que satisfait le résultat ",[603,9573,9574],{},"si"," la\nprécondition est respectée.",[733,9577,9578,4331,9581,9584,9585,9587,9588,9590,9591,1895],{},[603,9579,9580],{},"Docstring",[858,9582,9583],{},"\"\"\"...\"\"\""," juste après ",[858,9586,3000],{},", accessible via\n",[858,9589,4749],{}," ou ",[858,9592,9593],{},"f.__doc__",[733,9595,9596,9601,9602,9604],{},[603,9597,9598],{},[858,9599,9600],{},"assert condition, message"," : vérifie une précondition à l'exécution\net lève une ",[858,9603,4941],{}," en cas d'échec.",[594,9606,8576],{"id":8575},[633,9608,9609,9618],{},[636,9610,9611],{},[639,9612,9613,9615],{},[642,9614,2806],{},[642,9616,9617],{},"Élément à écrire",[649,9619,9620,9628,9638,9646],{},[639,9621,9622,9625],{},[654,9623,9624],{},"Indiquer les types d'entrée et de sortie",[654,9626,9627],{},"Annotations dans la signature",[639,9629,9630,9633],{},[654,9631,9632],{},"Dire ce que la fonction attend des arguments",[654,9634,9635,9636,7379],{},"Précondition (docstring + ",[858,9637,4851],{},[639,9639,9640,9643],{},[654,9641,9642],{},"Dire ce que la fonction promet",[654,9644,9645],{},"Postcondition (docstring)",[639,9647,9648,9651],{},[654,9649,9650],{},"Donner un exemple d'usage",[654,9652,9653,9654,9656],{},"Bloc ",[858,9655,5190],{}," dans la docstring",[594,9658,1437],{"id":1436},[730,9660,9661,9668,9676],{},[733,9662,9663,9664,9667],{},"Les annotations Python ",[603,9665,9666],{},"ne valident pas"," les types à l'exécution.",[733,9669,9670,9672,9673,9675],{},[858,9671,4851],{}," est désactivé avec ",[858,9674,4991],{}," : ne pas s'en servir comme\ncontrôle métier vital.",[733,9677,9678],{},"Spécifier après avoir codé conduit à de mauvaises fonctions ; spécifier\nd'abord.",[594,9680,8660],{"id":8659},[850,9682,9684],{"className":852,"code":9683,"language":855,"meta":856,"style":856},"def racine_carree(x: float) -> float:\n    \"\"\"Renvoie la racine carrée de x.\n\n    Précondition  : x >= 0.\n    Postcondition : résultat >= 0 et résultat² ≈ x.\n\n    >>> racine_carree(9)\n    3.0\n    \"\"\"\n    assert x >= 0, \"x doit être positif ou nul\"\n    return x ** 0.5\n",[858,9685,9686,9702,9706,9710,9714,9719,9723,9731,9736,9740,9754],{"__ignoreMap":856},[771,9687,9688,9690,9692,9694,9696,9698,9700],{"class":862,"line":863},[771,9689,3000],{"class":870},[771,9691,4874],{"class":1022},[771,9693,4877],{"class":866},[771,9695,1713],{"class":874},[771,9697,4490],{"class":866},[771,9699,1713],{"class":874},[771,9701,1026],{"class":866},[771,9703,9704],{"class":862,"line":878},[771,9705,4890],{"class":1250},[771,9707,9708],{"class":862,"line":907},[771,9709,1084],{"emptyLinePlaceholder":1083},[771,9711,9712],{"class":862,"line":929},[771,9713,4899],{"class":1250},[771,9715,9716],{"class":862,"line":1062},[771,9717,9718],{"class":1250},"    Postcondition : résultat >= 0 et résultat² ≈ x.\n",[771,9720,9721],{"class":862,"line":1080},[771,9722,1084],{"emptyLinePlaceholder":1083},[771,9724,9725,9728],{"class":862,"line":1087},[771,9726,9727],{"class":870},"    >>> ",[771,9729,9730],{"class":1250},"racine_carree(9)\n",[771,9732,9733],{"class":862,"line":1098},[771,9734,9735],{"class":1250},"    3.0\n",[771,9737,9738],{"class":862,"line":1119},[771,9739,4725],{"class":1250},[771,9741,9742,9744,9746,9748,9750,9752],{"class":862,"line":1125},[771,9743,4913],{"class":870},[771,9745,4191],{"class":866},[771,9747,2176],{"class":870},[771,9749,2610],{"class":874},[771,9751,898],{"class":866},[771,9753,4924],{"class":1250},[771,9755,9756,9758,9760,9762],{"class":862,"line":2326},[771,9757,3032],{"class":870},[771,9759,4191],{"class":866},[771,9761,3852],{"class":870},[771,9763,4935],{"class":874},[1474,9765,9766],{},"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":856,"searchDepth":878,"depth":878,"links":9768},[9769,9770,9771,9772,9773],{"id":8523,"depth":878,"text":8524},{"id":8534,"depth":878,"text":8535},{"id":8575,"depth":878,"text":8576},{"id":1436,"depth":878,"text":1437},{"id":8659,"depth":878,"text":8660},"Mémo de révision sur signature, précondition, postcondition et docstring.",{},"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fspecification.memo",[],{"title":9534,"description":9774},"1.nsi-1ere\u002Fpg-langages-prog\u002F4.specification.memo","C_M88oF6i4mxH-zJAf071J7HTEmf1t-NBrYisAJML9U",{"id":9782,"title":9783,"bo":9784,"body":9785,"description":10046,"eval":1487,"extension":1488,"labo":1487,"meta":10047,"navigation":1494,"path":10048,"quizzes":10049,"readingTime":863,"seo":10050,"stem":10051,"tp":1487,"__hash__":10052},"coursMemo\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point.memo.md","Mise au point des programmes — l'essentiel",[5327],{"type":591,"value":9786,"toc":10038},[9787,9789,9803,9805,9857,9859,9900,9904,9931,9933,9950,9952,10036],[594,9788,8524],{"id":8523},[599,9790,9791,9792,9795,9796,9798,9799,9802],{},"Mettre au point un programme, c'est repérer les bugs avec ",[603,9793,9794],{},"méthode"," —\nlire le message d'erreur, tracer avec ",[858,9797,932],{},", et construire un ",[603,9800,9801],{},"jeu de\ntests"," qui couvre les cas normaux, limites et extrêmes.",[594,9804,8535],{"id":8534},[730,9806,9807,9829,9835,9841,9845],{},[733,9808,9809,6810,9812],{},[603,9810,9811],{},"Trois types d'erreurs",[730,9813,9814,9819,9824],{},[733,9815,9816,9818],{},[603,9817,5407],{}," : refus de lancer.",[733,9820,9821,9823],{},[603,9822,5423],{}," : exception en cours.",[733,9825,9826,9828],{},[603,9827,5436],{}," : résultat faux, programme silencieux.",[733,9830,9831,9832,9834],{},"Lire un ",[858,9833,5749],{}," : de bas en haut pour la cause, de haut en bas pour\nl'enchaînement.",[733,9836,9837,9840],{},[603,9838,9839],{},"Jeu de tests"," : cas normaux + limites + extrêmes + interdits.",[733,9842,9843],{},[603,9844,5995],{},[733,9846,9847,9850,9851,9854,9855,1895],{},[858,9848,9849],{},"assert condition"," : test passe si ",[858,9852,9853],{},"condition"," est vraie, sinon\n",[858,9856,4941],{},[594,9858,8576],{"id":8575},[633,9860,9861,9870],{},[636,9862,9863],{},[639,9864,9865,9867],{},[642,9866,5396],{},[642,9868,9869],{},"Type d'erreur",[649,9871,9872,9881,9893],{},[639,9873,9874,9879],{},[654,9875,9876,9878],{},[858,9877,9110],{}," au lancement",[654,9880,5407],{},[639,9882,9883,9891],{},[654,9884,9885,9886,898,9889,7608],{},"Trace ",[858,9887,9888],{},"IndexError",[858,9890,5705],{},[654,9892,5423],{},[639,9894,9895,9898],{},[654,9896,9897],{},"Programme tourne mais résultat faux",[654,9899,5436],{},[594,9901,9903],{"id":9902},"démarche","Démarche",[3626,9905,9906,9909,9912,9915,9921,9924],{},[733,9907,9908],{},"Reproduire le bug.",[733,9910,9911],{},"Isoler le cas minimal.",[733,9913,9914],{},"Lire le message d'erreur.",[733,9916,9917,9918,9920],{},"Tracer (",[858,9919,932],{}," ou débogueur).",[733,9922,9923],{},"Hypothèse.",[733,9925,9926,9927,9930],{},"Correction + relance ",[603,9928,9929],{},"complète"," des tests.",[594,9932,1437],{"id":1436},[730,9934,9935,9938,9941,9944],{},[733,9936,9937],{},"Modifier au hasard sans hypothèse.",[733,9939,9940],{},"Ne tester que les cas normaux.",[733,9942,9943],{},"Confondre « ne plante pas » et « est correct ».",[733,9945,9946,9947,9949],{},"Laisser des ",[858,9948,932],{}," de debug en version finale.",[594,9951,8660],{"id":8659},[850,9953,9955],{"className":852,"code":9954,"language":855,"meta":856,"style":856},"def double(n):\n    return n * 2\n\nassert double(0) == 0\nassert double(3) == 6\nassert double(-2) == -4\nprint(\"Tests OK\")\n",[858,9956,9957,9965,9975,9979,9993,10007,10025],{"__ignoreMap":856},[771,9958,9959,9961,9963],{"class":862,"line":863},[771,9960,3000],{"class":870},[771,9962,4100],{"class":1022},[771,9964,3027],{"class":866},[771,9966,9967,9969,9971,9973],{"class":862,"line":878},[771,9968,3032],{"class":870},[771,9970,1072],{"class":866},[771,9972,923],{"class":870},[771,9974,2733],{"class":874},[771,9976,9977],{"class":862,"line":907},[771,9978,1084],{"emptyLinePlaceholder":1083},[771,9980,9981,9983,9985,9987,9989,9991],{"class":862,"line":929},[771,9982,4851],{"class":870},[771,9984,6054],{"class":866},[771,9986,4021],{"class":874},[771,9988,1944],{"class":866},[771,9990,1630],{"class":870},[771,9992,875],{"class":874},[771,9994,9995,9997,9999,10001,10003,10005],{"class":862,"line":1062},[771,9996,4851],{"class":870},[771,9998,6054],{"class":866},[771,10000,1257],{"class":874},[771,10002,1944],{"class":866},[771,10004,1630],{"class":870},[771,10006,6077],{"class":874},[771,10008,10009,10011,10013,10015,10017,10019,10021,10023],{"class":862,"line":1080},[771,10010,4851],{"class":870},[771,10012,6054],{"class":866},[771,10014,2631],{"class":870},[771,10016,3168],{"class":874},[771,10018,1944],{"class":866},[771,10020,1630],{"class":870},[771,10022,6094],{"class":870},[771,10024,3834],{"class":874},[771,10026,10027,10029,10031,10034],{"class":862,"line":1087},[771,10028,932],{"class":874},[771,10030,893],{"class":866},[771,10032,10033],{"class":1250},"\"Tests OK\"",[771,10035,965],{"class":866},[1474,10037,9766],{},{"title":856,"searchDepth":878,"depth":878,"links":10039},[10040,10041,10042,10043,10044,10045],{"id":8523,"depth":878,"text":8524},{"id":8534,"depth":878,"text":8535},{"id":8575,"depth":878,"text":8576},{"id":9902,"depth":878,"text":9903},{"id":1436,"depth":878,"text":1437},{"id":8659,"depth":878,"text":8660},"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":9783,"description":10046},"1.nsi-1ere\u002Fpg-langages-prog\u002F5.mise-au-point.memo","Flo4dGANgrYocDjSHH06kceaVxFAFp_0ekWL0Uyk1mw",{"id":10054,"title":10055,"bo":10056,"body":10057,"description":10390,"eval":1487,"extension":1488,"labo":1487,"meta":10391,"navigation":1494,"path":10392,"quizzes":10393,"readingTime":863,"seo":10394,"stem":10395,"tp":1487,"__hash__":10396},"coursMemo\u002F1.nsi-1ere\u002Fpg-langages-prog\u002F6.bibliotheques.memo.md","Utilisation de bibliothèques — l'essentiel",[6460],{"type":591,"value":10058,"toc":10383},[10059,10061,10070,10072,10118,10120,10241,10243,10307,10309,10380],[594,10060,8524],{"id":8523},[599,10062,1549,10063,10066,10067,10069],{},[603,10064,10065],{},"bibliothèque"," regroupe des fonctions et constantes prêtes à\nl'emploi — on les rend disponibles par ",[858,10068,1212],{}," et on les utilise via la\nnotation point.",[594,10071,8535],{"id":8534},[730,10073,10074,10104,10109],{},[733,10075,10076,10077],{},"Trois formes d'import :\n",[730,10078,10079,10088,10096],{},[733,10080,10081,10083,10084,10087],{},[858,10082,3665],{}," → ",[858,10085,10086],{},"math.sqrt(2)"," (origine claire).",[733,10089,10090,10083,10092,10095],{},[858,10091,6698],{},[858,10093,10094],{},"sqrt(2)"," (court).",[733,10097,10098,10083,10100,10103],{},[858,10099,6716],{},[858,10101,10102],{},"m.sqrt(2)"," (alias).",[733,10105,10106],{},[603,10107,10108],{},"Toujours importer en tête de fichier.",[733,10110,10111,9590,10114,10117],{},[858,10112,10113],{},"help(fonction)",[858,10115,10116],{},"fonction.__doc__"," pour lire la doc.",[594,10119,8576],{"id":8575},[633,10121,10122,10135],{},[636,10123,10124],{},[639,10125,10126,10129,10132],{},[642,10127,10128],{},"Besoin",[642,10130,10131],{},"Module",[642,10133,10134],{},"Fonction typique",[649,10136,10137,10185,10198,10212,10226],{},[639,10138,10139,10172,10176],{},[654,10140,10141,10142,10171],{},"Racine carrée, ",[771,10143,10145,10159],{"className":10144},[774],[771,10146,10148],{"className":10147},[778],[780,10149,10150],{"xmlns":782},[784,10151,10152,10156],{},[787,10153,10154],{},[3695,10155,6927],{},[794,10157,10158],{"encoding":796},"\\pi",[771,10160,10162],{"className":10161,"ariaHidden":801},[800],[771,10163,10165,10168],{"className":10164},[805],[771,10166],{"className":10167,"style":7091},[809],[771,10169,6927],{"className":10170,"style":6951},[814,3746],", factorielle",[654,10173,10174],{},[858,10175,780],{},[654,10177,10178,898,10180,898,10182],{},[858,10179,6560],{},[858,10181,6563],{},[858,10183,10184],{},"math.factorial",[639,10186,10187,10190,10194],{},[654,10188,10189],{},"Tirage aléatoire entre 1 et 6",[654,10191,10192],{},[858,10193,7482],{},[654,10195,10196],{},[858,10197,8202],{},[639,10199,10200,10203,10207],{},[654,10201,10202],{},"Choix d'un élément au hasard",[654,10204,10205],{},[858,10206,7482],{},[654,10208,10209],{},[858,10210,10211],{},"random.choice(liste)",[639,10213,10214,10217,10221],{},[654,10215,10216],{},"Mélanger une liste",[654,10218,10219],{},[858,10220,7482],{},[654,10222,10223],{},[858,10224,10225],{},"random.shuffle(liste)",[639,10227,10228,10231,10235],{},[654,10229,10230],{},"Moyenne, médiane",[654,10232,10233],{},[858,10234,7913],{},[654,10236,10237,898,10239],{},[858,10238,7935],{},[858,10240,7945],{},[594,10242,1437],{"id":1436},[730,10244,10245,10256,10293,10302],{},[733,10246,10247,10249,10250,614,10252,2896,10254,1895],{},[858,10248,7576],{}," inclut ",[858,10251,2474],{},[858,10253,2460],{},[858,10255,2474],{},[733,10257,10258,10261,10262,8263,10265,3228],{},[858,10259,10260],{},"math.log"," est le log ",[603,10263,10264],{},"naturel",[771,10266,10268,10281],{"className":10267},[774],[771,10269,10271],{"className":10270},[778],[780,10272,10273],{"xmlns":782},[784,10274,10275,10279],{},[787,10276,10277],{},[3695,10278,7008],{},[794,10280,7008],{"encoding":796},[771,10282,10284],{"className":10283,"ariaHidden":801},[800],[771,10285,10287,10290],{"className":10286},[805],[771,10288],{"className":10289,"style":7091},[809],[771,10291,7008],{"className":10292},[814,3746],[733,10294,10295,5152,10297,10299,10300,1895],{},[858,10296,8301],{},[858,10298,8304],{}," attendent des ",[603,10301,8308],{},[733,10303,10304,10306],{},[858,10305,6735],{}," à éviter.",[594,10308,8660],{"id":8659},[850,10310,10312],{"className":852,"code":10311,"language":855,"meta":856,"style":856},"import math\nimport random\nimport statistics\n\nprint(math.sqrt(2))\nprint(random.randint(1, 6))\nprint(statistics.mean([10, 12, 14]))\n",[858,10313,10314,10320,10326,10332,10336,10346,10361],{"__ignoreMap":856},[771,10315,10316,10318],{"class":862,"line":863},[771,10317,1212],{"class":870},[771,10319,3806],{"class":866},[771,10321,10322,10324],{"class":862,"line":878},[771,10323,1212],{"class":870},[771,10325,7740],{"class":866},[771,10327,10328,10330],{"class":862,"line":907},[771,10329,1212],{"class":870},[771,10331,7992],{"class":866},[771,10333,10334],{"class":862,"line":929},[771,10335,1084],{"emptyLinePlaceholder":1083},[771,10337,10338,10340,10342,10344],{"class":862,"line":1062},[771,10339,932],{"class":874},[771,10341,6527],{"class":866},[771,10343,3168],{"class":874},[771,10345,3513],{"class":866},[771,10347,10348,10350,10353,10355,10357,10359],{"class":862,"line":1080},[771,10349,932],{"class":874},[771,10351,10352],{"class":866},"(random.randint(",[771,10354,792],{"class":874},[771,10356,898],{"class":866},[771,10358,901],{"class":874},[771,10360,3513],{"class":866},[771,10362,10363,10365,10368,10370,10372,10374,10376,10378],{"class":862,"line":1087},[771,10364,932],{"class":874},[771,10366,10367],{"class":866},"(statistics.mean([",[771,10369,5539],{"class":874},[771,10371,898],{"class":866},[771,10373,5516],{"class":874},[771,10375,898],{"class":866},[771,10377,5526],{"class":874},[771,10379,5868],{"class":866},[1474,10381,10382],{},"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 .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":856,"searchDepth":878,"depth":878,"links":10384},[10385,10386,10387,10388,10389],{"id":8523,"depth":878,"text":8524},{"id":8534,"depth":878,"text":8535},{"id":8575,"depth":878,"text":8576},{"id":1436,"depth":878,"text":1437},{"id":8659,"depth":878,"text":8660},"Mémo de révision sur l'import et les modules math, random, statistics.",{},"\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fbibliotheques.memo",[],{"title":10055,"description":10390},"1.nsi-1ere\u002Fpg-langages-prog\u002F6.bibliotheques.memo","UvmlIIXrBtdl_zgwFJ81u1zJyUNvtlolGBwe2zh5c8U",{"id":10398,"title":10399,"bo":10400,"body":10401,"description":10861,"eval":1487,"extension":1488,"labo":1487,"meta":10862,"navigation":1494,"path":10864,"quizzes":10865,"readingTime":863,"seo":10893,"stem":10894,"tp":1487,"__hash__":10895},"coursMemo\u002F1.nsi-1ere\u002Fpg-langages-prog\u002Fchapitre.memo.md","Langages et programmation — synthèse",[1502,589,5327,4393,6460],{"type":591,"value":10402,"toc":10854},[10403,10407,10421,10435,10474,10497,10517,10521,10619,10623,10647,10651,10675,10705,10741,10767,10778,10799,10826],[594,10404,10406],{"id":10405},"vue-densemble","Vue d'ensemble",[599,10408,10409,10410,10413,10414,10417,10418,1895],{},"Ce chapitre vous a fait passer du ",[603,10411,10412],{},"panorama"," des langages de programmation\naux ",[603,10415,10416],{},"outils de production"," d'un code de qualité. Le fil rouge est simple :\nécrire un programme, ce n'est pas seulement « faire en sorte que ça marche ».\nC'est faire en sorte que ",[603,10419,10420],{},"ça marche, que ça se comprenne, et qu'on puisse\nen être sûr",[599,10422,10423,10424,2875,10427,10430,10431,10434],{},"Vous avez d'abord constaté qu'il existe des centaines de langages, organisés\nen grandes familles — impératif, fonctionnel, objet — et que la frontière\nentre ",[603,10425,10426],{},"compilation",[603,10428,10429],{},"interprétation"," est centrale pour comprendre\nleur mode d'exécution. Vous avez vu que sous cette diversité, ",[603,10432,10433],{},"les mêmes\ncinq constructions"," se retrouvent partout : affectation, expression,\nconditionnelle, boucle bornée, boucle non bornée. Python, multi-paradigme et\ninterprété, sert de support unique à cette première année.",[599,10436,10437,10438,10440,10441,898,10443,898,10445,898,10447,10449,10450,10453,10454,2132,10456,10458,10459,10461,10462,2875,10465,10468,10469,2875,10472,1895],{},"Vous avez ensuite revu et formalisé ces ",[603,10439,8423],{}," :\nvariables, types de base (",[858,10442,1695],{},[858,10444,1713],{},[858,10446,1731],{},[858,10448,1746],{},"), distinction\nexpression\u002Finstruction, conditionnelles ",[858,10451,10452],{},"if\u002Felif\u002Felse",", boucles ",[858,10455,881],{},[858,10457,2569],{},". La ",[603,10460,2930],{}," est venue ajouter une sixième brique fondamentale —\nla possibilité de ",[603,10463,10464],{},"nommer",[603,10466,10467],{},"réutiliser"," un calcul, avec ses\nparamètres, son retour, et la séparation entre ",[603,10470,10471],{},"définir",[603,10473,3088],{},[599,10475,10476,10477,10479,10480,10482,10483,10486,10487,10489,10490,10492,10493,10496],{},"Vous avez ensuite découvert que la qualité d'une fonction passe par sa\n",[603,10478,4390],{}," : signature avec types, précondition, postcondition et\ndocstring forment un ",[603,10481,4625],{}," entre la fonction et son utilisateur. Cette\nspécification ouvre naturellement la voie aux ",[603,10484,10485],{},"tests"," : la mise au point\ndes programmes — chasse aux bugs, lecture de traces, démarche méthodique,\nconstruction d'un ",[603,10488,5909],{}," avec ",[858,10491,4851],{}," — est l'activité\nquotidienne du programmeur. Vous avez retenu que ",[603,10494,10495],{},"le succès d'un jeu de\ntests ne prouve pas la correction",", mais qu'il en est le meilleur\nindicateur disponible.",[599,10498,10499,10500,10502,10503,10505,10506,898,10508,2875,10510,10512,10513,10516],{},"Enfin, vous avez appris à mobiliser la ",[603,10501,6474],{}," Python : le\nmécanisme d'",[858,10504,1212],{},", la lecture d'une documentation, et l'usage des modules\n",[858,10507,780],{},[858,10509,7482],{},[858,10511,7913],{},". C'est l'aboutissement de l'année : un\nprogramme bien structuré ne se contente pas d'utiliser le langage — il\n",[603,10514,10515],{},"s'appuie sur l'écosystème"," pour ne pas réinventer la roue.",[594,10518,10520],{"id":10519},"carte-des-notions","Carte des notions",[633,10522,10523,10536],{},[636,10524,10525],{},[639,10526,10527,10530,10533],{},[642,10528,10529],{},"Cours",[642,10531,10532],{},"Item BO",[642,10534,10535],{},"Concepts-clés",[649,10537,10538,10548,10564,10579,10591,10601],{},[639,10539,10540,10543,10545],{},[654,10541,10542],{},"1. Diversité des langages",[654,10544,589],{},[654,10546,10547],{},"paradigmes, compilation vs interprétation, briques universelles",[639,10549,10550,10553,10555],{},[654,10551,10552],{},"2. Constructions élémentaires",[654,10554,1502],{},[654,10556,10557,10558,898,10560,898,10562],{},"variables, types, expressions, ",[858,10559,2170],{},[858,10561,881],{},[858,10563,2569],{},[639,10565,10566,10569,10571],{},[654,10567,10568],{},"3. Fonctions",[654,10570,1502],{},[654,10572,10573,10575,10576,10578],{},[858,10574,3000],{},", paramètre vs argument, ",[858,10577,3074],{},", portée",[639,10580,10581,10584,10586],{},[654,10582,10583],{},"4. Spécification",[654,10585,4393],{},[654,10587,10588,10589],{},"signature, docstring, précondition, postcondition, ",[858,10590,4851],{},[639,10592,10593,10596,10598],{},[654,10594,10595],{},"5. Mise au point",[654,10597,5327],{},[654,10599,10600],{},"erreurs (syntaxe\u002Fexécution\u002Flogique), tests, démarche",[639,10602,10603,10606,10608],{},[654,10604,10605],{},"6. Bibliothèques",[654,10607,6460],{},[654,10609,10610,10612,10613,898,10615,898,10617],{},[858,10611,1212],{},", doc, ",[858,10614,780],{},[858,10616,7482],{},[858,10618,7913],{},[5451,10620,10622],{"id":10621},"dépendances-entre-cours","Dépendances entre cours",[730,10624,10625,10631,10641],{},[733,10626,10627,10630],{},[603,10628,10629],{},"Cours 2 et 3"," prolongent le panorama du cours 1 sur Python.",[733,10632,10633,10636,10637,10640],{},[603,10634,10635],{},"Cours 4"," précède naturellement ",[603,10638,10639],{},"cours 5"," : on spécifie pour pouvoir\ntester.",[733,10642,10643,10646],{},[603,10644,10645],{},"Cours 6"," est complémentaire — il s'appuie sur les notions des cours\n3 et 4 (lire une signature, importer des fonctions).",[594,10648,10650],{"id":10649},"auto-évaluation","Auto-évaluation",[1137,10652,10654,10662],{"correct":3168,"slug":10653},"pg-langages-prog-1-q1",[1141,10655,10656],{"v-slot:question":856},[599,10657,10658,10659,2797],{},"Parmi ces langages, lequel est typiquement ",[603,10660,10661],{},"compilé",[1141,10663,10664],{"v-slot:choices":856},[730,10665,10666,10668,10671,10673],{},[733,10667,1152],{},[733,10669,10670],{},"JavaScript",[733,10672,1155],{},[733,10674,1158],{},[1137,10676,10678,10689],{"correct":792,"slug":10677},"pg-langages-prog-1-q2",[1141,10679,10680],{"v-slot:question":856},[599,10681,10682,10683,10686,10687,2797],{},"Que vaut la liste produite par ",[858,10684,10685],{},"range(2, 7)"," quand on la parcourt avec une boucle ",[858,10688,881],{},[1141,10690,10691],{"v-slot:choices":856},[730,10692,10693,10696,10699,10702],{},[733,10694,10695],{},"2, 3, 4, 5, 6, 7",[733,10697,10698],{},"2, 3, 4, 5, 6",[733,10700,10701],{},"3, 4, 5, 6, 7",[733,10703,10704],{},"2, 4, 6",[1137,10706,10708,10718],{"correct":792,"slug":10707},"pg-langages-prog-1-q3",[1141,10709,10710],{"v-slot:question":856},[599,10711,10712,10713,2875,10715,10717],{},"Quelle différence majeure entre ",[858,10714,871],{},[858,10716,1630],{}," en Python ?",[1141,10719,10720],{"v-slot:choices":856},[730,10721,10722,10725,10733],{},[733,10723,10724],{},"Ce sont deux écritures pour la même chose",[733,10726,10727,10729,10730,10732],{},[858,10728,871],{}," est une affectation, ",[858,10731,1630],{}," est un test d'égalité",[733,10734,10735,10737,10738,10740],{},[858,10736,871],{}," est une comparaison, ",[858,10739,1630],{}," est une affectation",[1137,10742,10744,10754],{"correct":3168,"slug":10743},"pg-langages-prog-1-q4",[1141,10745,10746],{"v-slot:question":856},[599,10747,3249,10748,10751,10752,2797],{},[858,10749,10750],{},"def aire(rayon: float) -> float:",", que représente ",[858,10753,3256],{},[1141,10755,10756],{"v-slot:choices":856},[730,10757,10758,10761,10763,10765],{},[733,10759,10760],{},"Une variable globale",[733,10762,3263],{},[733,10764,3266],{},[733,10766,3269],{},[10768,10769,10771],"self-eval-free-text",{"answer":3424,"case-sensitive":801,"slug":10770},"pg-langages-prog-1-q5",[1141,10772,10773],{"v-slot:question":856},[599,10774,10775,10776,2797],{},"Que retourne une fonction Python qui ne contient aucune instruction ",[858,10777,3074],{},[1137,10779,10781,10786],{"correct":4021,"slug":10780},"pg-langages-prog-1-q6",[1141,10782,10783],{"v-slot:question":856},[599,10784,10785],{},"Une précondition concerne en priorité :",[1141,10787,10788],{"v-slot:choices":856},[730,10789,10790,10793,10796],{},[733,10791,10792],{},"Les arguments passés à la fonction",[733,10794,10795],{},"La valeur de retour de la fonction",[733,10797,10798],{},"L'affichage produit par la fonction",[1137,10800,10802,10810],{"correct":3168,"slug":10801},"pg-langages-prog-1-q7",[1141,10803,10804],{"v-slot:question":856},[599,10805,10806,10807],{},"Quel type d'erreur produit le programme suivant ? ",[858,10808,10809],{},"notes = []; print(sum(notes) \u002F len(notes))",[1141,10811,10812],{"v-slot:choices":856},[730,10813,10814,10817,10820,10823],{},[733,10815,10816],{},"SyntaxError au lancement",[733,10818,10819],{},"IndexError d'exécution",[733,10821,10822],{},"ZeroDivisionError d'exécution",[733,10824,10825],{},"Aucune erreur, il affiche 0",[10827,10828,10830,10835],"self-eval-ordering",{"slug":10829},"pg-langages-prog-1-q8",[1141,10831,10832],{"v-slot:question":856},[599,10833,10834],{},"Ordonnez les étapes d'une démarche méthodique de débogage.",[1141,10836,10837],{"v-slot:items":856},[730,10838,10839,10842,10845,10848,10851],{},[733,10840,10841],{},"Reproduire le bug sur un cas minimal",[733,10843,10844],{},"Lire le message d'erreur",[733,10846,10847],{},"Tracer les valeurs des variables suspectes",[733,10849,10850],{},"Formuler une hypothèse sur la cause",[733,10852,10853],{},"Corriger et relancer le jeu de tests complet",{"title":856,"searchDepth":878,"depth":878,"links":10855},[10856,10857,10860],{"id":10405,"depth":878,"text":10406},{"id":10519,"depth":878,"text":10520,"children":10858},[10859],{"id":10621,"depth":907,"text":10622},{"id":10649,"depth":878,"text":10650},"Vue d'ensemble du chapitre, carte des notions et auto-évaluation finale.",{"self_eval_slug":10863},"nsi-1ere-pg-langages-prog","\u002Fnsi-1ere\u002Fpg-langages-prog\u002Fchapitre.memo",[10866,10869,10872,10877,10880,10885,10887,10890],{"slug":10653,"kind":1492,"question":10867,"choices":10868,"correct":3168,"multi":1494,"explanation":856},"Parmi ces langages, lequel est typiquement compilé ?",[1152,10670,1155,1158],{"slug":10677,"kind":1492,"question":10870,"choices":10871,"correct":792,"multi":1494,"explanation":856},"Que vaut la liste produite par range(2, 7) quand on la parcourt avec une boucle for ?",[10695,10698,10701,10704],{"slug":10707,"kind":1492,"question":10873,"choices":10874,"correct":792,"multi":1494,"explanation":856},"Quelle différence majeure entre = et == en Python ?",[10724,10875,10876],"= est une affectation, == est un test d'égalité","= est une comparaison, == est une affectation",{"slug":10743,"kind":1492,"question":10878,"choices":10879,"correct":3168,"multi":1494,"explanation":856},"Dans def aire(rayon: float) -> float:, que représente rayon ?",[10760,3263,3266,3269],{"slug":10770,"kind":10881,"question":10882,"answer":3424,"caseSensitive":1083,"tolerance":10883,"inputType":10884,"explanation":856},"free_text","Que retourne une fonction Python qui ne contient aucune instruction return ?",0,"string",{"slug":10780,"kind":1492,"question":10785,"choices":10886,"correct":4021,"multi":1494,"explanation":856},[10792,10795,10798],{"slug":10801,"kind":1492,"question":10888,"choices":10889,"correct":3168,"multi":1494,"explanation":856},"Quel type d'erreur produit le programme suivant ? notes = []; print(sum(notes) \u002F len(notes))",[10816,10819,10822,10825],{"slug":10829,"kind":10891,"question":10834,"items":10892,"explanation":856},"ordering",[10841,10844,10847,10850,10853],{"title":10399,"description":10861},"1.nsi-1ere\u002Fpg-langages-prog\u002Fchapitre.memo","wmfJWMcyH3vu9OHpv3RzmCPb_UGFonhRQHdoGacRbyM",1788035582499]