import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Structures%20de%20contr%C3%B4le%2C%20boucles%20et%20conteneurs%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%201.%20Structures%20de%20contr%C3%B4le%20et%20boucles%0A%0A%20%20%20%20Si%20nous%20voulons%20pouvoir%20%C3%A9crire%20des%20algorithmes%20v%C3%A9ritablement%20utiles%2C%20il%20nous%20faut%20des%20techniques%20permettant%20d'aiguiller%20le%20d%C3%A9roulement%20du%20programme%20dans%20diff%C3%A9rentes%20directions%2C%20en%20fonction%20des%20circonstances%20rencontr%C3%A9es%20(valeur%20d'une%20variable%2C%20nombre%20d'it%C3%A9rations%20d'un%20algorithme%2C%20etc.).%20Pour%20ce%20faire%2C%20nous%20devons%20disposer%20d'instructions%20capables%20de%20tester%20une%20certaine%20condition%20et%20de%20modifier%20le%20comportement%20du%20programme%20en%20cons%C3%A9quence.%0A%0A%20%20%20%20%23%23%23%201.1%20L'instruction%20%60if%60%0A%0A%20%20%20%20Il%20s'agit%20peut-%C3%AAtre%20de%20l'instruction%20la%20plus%20simple%20possible.%20Comme%20son%20nom%20l'indique%2C%20il%20s'agit%20d'ex%C3%A9cuter%20une%20action%20_si_%20(%60if%60%20en%20anglais)%20une%20condition%20est%20v%C3%A9rifi%C3%A9e.%20Il%20est%20%C3%A9galement%20possible%20d'encha%C3%AEner%20plusieurs%20%60if%60%20%C3%A0%20la%20suite.%20La%20syntaxe%20g%C3%A9n%C3%A9rale%20est%20%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20if%20expression_1%20%3A%0A%20%20%20%20%20%20%20%20instructions_1%0A%20%20%20%20elif%20expression_2%20%3A%0A%20%20%20%20%20%20%20%20instructions_2%0A%20%20%20%20...%0A%20%20%20%20else%20%3A%0A%20%20%20%20%20%20%20%20instructions_n%0A%0A%20%20%20%20SUITE%20DU%20CODE%0A%20%20%20%20%60%60%60%0A%20%20%20%20Il%20faut%20lire%20le%20code%20ci-dessus%20de%20la%20fa%C3%A7on%20suivante%3A%0A%20%20%20%20-%20Si%20%60expression_1%60%20est%20vraie%2C%20alors%20ex%C3%A9cuter%20%60instructions_1%60%20puis%20passer%20%C3%A0%20la%20suite%20du%20code.%0A%20%20%20%20-%20Sinon%2C%20si%20%60expression_2%60%20est%20vraie%2C%20alors%20ex%C3%A9cuter%20%60instructions_2%60%20puis%20passer%20%C3%A0%20la%20suite%20du%20code.%0A%20%20%20%20-%20Ainsi%20de%20suite%2C%20et%20si%20aucune%20des%20%60expression_i%60%20pour%20%60i%3D1%2C...%2Cn-1%60%20n'est%20vraie%2C%20alors%20ex%C3%A9cuter%20%60instructions_n%60.%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Attention%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Parmis%20toutes%20les%20expressions%2C%20une%20seule%20sera%20ex%C3%A9cut%C3%A9e.%20S'il%20n'y%20a%20pas%20de%20%60else%60%20est%20qu'aucune%20condition%20n'est%20vraie%2C%20alors%20rien%20ne%20se%20passe.%20D%C3%A8s%20qu'une%20expression%20est%20vraie%2C%20les%20instructions%20associ%C3%A9es%20sont%20ex%C3%A9cut%C3%A9es%20et%20tous%20les%20%60elif%60%20suivants%20et%20le%20%60else%60%20sont%20ignor%C3%A9s.%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Indentation%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Notez%20les%20%60%3A%60%20apr%C3%A8s%20chaque%20expression%2C%20si%20vous%20ne%20les%20mettez%20pas%20Python%20renverra%20une%20erreur%20de%20syntaxe.%20De%20m%C3%AAme%2C%20tout%20ce%20qui%20doit%20%C3%AAtre%20ex%C3%A9cut%C3%A9%20apr%C3%A8s%20un%20%60if%60%20si%20l'expression%20est%20vraie%20est%20_indent%C3%A9_%20d'un%20cran.%20Cela%20permet%20%C3%A0%20la%20fois%20de%20rendre%20le%20code%20lisible%2C%20mais%20c'est%20aussi%20obligatoire%20pour%20que%20Python%20ex%C3%A9cute%20correctement%20le%20code.%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20Quelques%20exemples...%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20x%20%3D%202%0A%0A%20%20%20%20if%20x%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20print(%22x%20est%20nul...%22)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20print(%22x%20n'est%20pas%20nul%22)%0A%20%20%20%20return%20(x%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20nombre%20%3D%2042%0A%20%20%20%20texte%20%3D%20%22Salut%20tout%20le%20monde%20!%22%0A%0A%20%20%20%20if%20type(texte)%20%3D%3D%20int%3A%20%23%20il%20ne%20se%20passe%20rien%20car%20texte%20est%20de%20type%20str%2C%20pas%20int%0A%20%20%20%20%20%20%20%20print(texte)%0A%0A%20%20%20%20if%20type(nombre)%20%3D%3D%20int%3A%20%23%20ici%20il%20se%20passe%20quelque%20chose%20car%20nombre%20est%20un%20entier%0A%20%20%20%20%20%20%20%20print(%22Le%20nombre%20est%20%22%20%2B%20str(nombre))%20%23%20on%20peut%20m%C3%AAme%20customiser%20les%20affichages%2C%20magique%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(x)%3A%0A%20%20%20%20xx%20%3D%20-4%0A%20%20%20%20if%20((xx%20%3C%2010)%20and%20(xx%20%3E%200))%3A%20%23%20on%20met%20des%20parenth%C3%A8ses%20pour%20faciliter%20la%20lecture...%0A%20%20%20%20%20%20%20%20xx%20%3D%202%20*%20x%20%2B%201%0A%20%20%20%20elif%20(xx%20%3C%3D%200)%3A%0A%20%20%20%20%20%20%20%20xx%20%3D%20-xx%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20xx%20%2B%3D%201%0A%20%20%20%20print(xx)%20%23%23%20vous%20pouvez%20pr%C3%A9dire%20la%20sortie%20%3F%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20peut%20m%C3%AAme%20imbriquer%20des%20instructions%20%60if%60%20entre%20elles...%20Vous%20noterez%20cette%20fois%20l'importance%20des%20diff%C3%A9rents%20niveaux%20d'intendation%20!%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20a%20%3D%2057%0A%20%20%20%20if%20a%20%3E%3D%2010%3A%0A%20%20%20%20%20%20%20%20if%20a%20%3C%3D%2020%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(%22a%20est%20compris%20entre%2010%20et%2020%22)%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(%22a%20est%20plus%20grand%20que%2020%22)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20print(%22a%20est%20plus%20petit%20que%2010%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.2.%20L'instruction%20%60for%60%0A%0A%20%20%20%20L'instruction%20%60for%60%20est%20une%20boucle%2C%20ce%20qui%20veut%20dire%20qu'elle%20permet%20d'ex%C3%A9cuter%20une%20instruction%20un%20certain%20nombre%20de%20fois%2C%20avec%20des%20_it%C3%A9rateurs_%20dont%20la%20valeur%20peut%20changer%20au%20cours%20de%20la%20boucle.%20La%20syntaxe%20g%C3%A9n%C3%A9rale%20est%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20for%20item%20in%20iterable%20%3A%0A%20%20%20%20%20%20%20%20instructions%0A%20%20%20%20%60%60%60%0A%20%20%20%20Il%20faut%20comprendre%20cela%20comme%20la%20variable%20%60item%60%20va%20prendre%20toutes%20les%20valeurs%20possibles%20dans%20le%20conteneur%20%60iterable%60%2C%20et%20pour%20chacune%20de%20ces%20valeurs%2C%20on%20ex%C3%A9cute%20%60instructions%60.%20En%20particulier%2C%20une%20boucle%20%60for%60%20est%20toujours%20assurer%20de%20terminer%20si%20%60iterable%60%20est%20fini.%20Par%20exemple%2C%20ci-dessous%20la%20variable%20%60i%60%20prend%20toutes%20successivement%20tous%20les%20valeurs%20de%20%600%60%20%C3%A0%20%604%60%20puis%20l'affiche%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20for%20i%20in%20range(5)%3A%0A%20%20%20%20%20%20%20%20print(i)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20range%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20On%20rappelle%20que%20l%E2%80%99appel%20%60range(N)%60%20est%20une%20liste%20commen%C3%A7ant%20par%20%600%60%20et%20se%20terminant%20par%20%60N%E2%88%921%60%20(on%20reviendra%20plus%20tard%20plus%20en%20d%C3%A9tail%20sur%20les%20listes%20en%20Python).%20Notons%20%C3%A9galement%20qu%E2%80%99on%20peut%20faire%20l%E2%80%99appel%20%60range(N1%2CN2)%60%20qui%20correspond%20%C3%A0%20la%20liste%20%60N1%2C%20...%20%2C%20N2%E2%88%921%60.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.3.%20L'instruction%20%60while%60%0A%0A%20%20%20%20L'instruction%20%60while%60%20est%20%C3%A9galement%20une%20boucle%2C%20mais%20qui%20ex%C3%A9cute%20une%20instruction%20_tant%20que_%20une%20(ou%20des)%20conditions%20sont%20v%C3%A9rifi%C3%A9es.%20En%20particulier%2C%20il%20faut%20faire%20attention%20%C3%A0%20ce%20que%20ces%20conditions%20soient%20fausses%20au%20bout%20d'un%20moment%2C%20sinon%20la%20boucle%20tournera%20jusqu'%C3%A0%20l'infini%20!%20La%20syntaxe%20g%C3%A9n%C3%A9rale%20est%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20while%20expression%3A%0A%20%20%20%20%20%20%20%20instructions%0A%20%20%20%20%60%60%60%0A%20%20%20%20Il%20faut%20lire%20%22tant%20que%20expression%20est%20vraie%2C%20ex%C3%A9cuter%20instructions%22.%20Par%20exemple%2C%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20y%20%3D%201%0A%20%20%20%20while%20(y%20%3C%2014)%3A%0A%20%20%20%20%20%20%20%20y%20%2B%3D%205%0A%20%20%20%20print(y)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Terminer%20ses%20boucles%20%60while%60%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Il%20est%20important%20de%20s'assurer%20que%20les%20boucles%20%60while%60%20se%20termineront.%20Par%20exemple%2C%20une%20boucle%0A%20%20%20%20%60%60%60%0A%20%20%20%20a%20%3D%203%0A%20%20%20%20b%20%3D%204%0A%20%20%20%20while%20b%20%3D%3D%204%3A%0A%20%20%20%20%20%20%20%20a%20%2B%3D%201%0A%20%20%20%20print(a)%0A%20%20%20%20%60%60%60%0A%20%20%20%20n'affichera%20jamais%20%60a%60%20car%20%60b%3D%3D4%60%20est%20toujours%20vrai%20(%60b%60%20n'est%20pas%20modifi%C3%A9)%2C%20la%20boucle%20%60while%60%20ne%20se%20terminera%20jamais...%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20n%2C%20m%20%3D%20480%2C%20736%0A%20%20%20%20while%20m%3A%0A%20%20%20%20%20%20%20%20n%2C%20m%20%3D%20m%2C%20n%25m%0A%20%20%20%20%20%20%20%20print(n%2C%20m)%0A%20%20%20%20print(n)%20%23%20qu'a-t-on%20calcul%C3%A9%20%3F%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%201.4%20Les%20instructions%20%60break%60%20et%20%60continue%60%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20L'instruction%20%60break%60%20permet%20de%20sortir%20d'une%20boucle.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20for%20z%20in%20range(1%2C11)%3A%0A%20%20%20%20%20%20%20%20if%20z%20%3D%3D%205%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(%22beeep%20!%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20break%20%23%20s'ex%C3%A9cute%20avant%20le%20print(z)%0A%20%20%20%20%20%20%20%20print(z)%0A%20%20%20%20print(%22Boucle%20break%C3%A9e%20a%20z%20%3D%22%2C%20z)%20%23%20x%20est%20toujours%20l%C3%A0%2C%20et%20a%20gard%C3%A9%20sa%20derni%C3%A8re%20valeur%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20L'instruction%20%60continue%60%20permet%20d'interrompre%20l'it%C3%A9ration%20actuelle%20d'une%20boucle%20et%20de%20passer%20directement%20%C3%A0%20la%20suivante.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20for%20zz%20in%20range(1%2C11)%3A%0A%20%20%20%20%20%20%20%20if%20zz%20%3D%3D%205%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(%22Esquive%20!%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%20%23%20s'ex%C3%A9cute%20avant%20le%20print(zz)%0A%20%20%20%20%20%20%20%20print(zz)%0A%20%20%20%20print(%22Cette%20fois%2C%20la%20boucle%20s'est%20termin%C3%A9e%20et%20zz%20%3D%22%2C%20zz)%20%23%20x%20est%20toujours%20l%C3%A0%2C%20et%20a%20gard%C3%A9%20sa%20derni%C3%A8re%20valeur%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.%20Les%20conteneurs%20standards%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Conteneurs%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Un%20_conteneur_%20est%20objet%20contenant%20d'autres%20objets%20(pas%20forc%C3%A9ment%20de%20m%C3%AAme%20type).%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20Dans%20ce%20cours%2C%20nous%20verrons%20trois%20types%20de%20conteneurs%3A%20les%20s%C3%A9quences%2C%20les%20tableaux%20associatifs%20(dictionnaires)%20et%20les%20ensembles.%0A%0A%20%20%20%20%23%23%23%202.1.%20Les%20s%C3%A9quences%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20S%C3%A9quences%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Une%20_s%C3%A9quence_%20est%20un%20conteneur%20_ordonn%C3%A9_%20d'%C3%A9l%C3%A9ments%20index%C3%A9s%20par%20des%20entiers%20(indices)%20qui%20indiquent%20leur%20position%20dans%20le%20conteneur.%20On%20peut%20les%20voir%2C%20d'un%20point%20de%20vue%20math%C3%A9matiques%2C%20comme%20des%20suites%20finies.%20En%20Python%2C%20il%20y%20a%20trois%20types%20de%20s%C3%A9quences%20pr%C3%A9d%C3%A9finies%3A%0A%20%20%20%20-%20les%20cha%C3%AEnes%20de%20caract%C3%A8res%0A%20%20%20%20-%20les%20listes%0A%20%20%20%20-%20les%20tuples%0A%20%20%20%20%2F%2F%2F%0A%0A%20%20%20%20Quelques%20%C3%A9l%C3%A9ments%20de%20syntaxe%3A%0A%20%20%20%20-%20On%20acc%C3%A8de%20%C3%A0%20un%20%C3%A9l%C3%A9ment%20d'indice%20%60i%60%20avec%20l'op%C3%A9rateur%20%60%5Bi%5D%60.%0A%20%20%20%20-%20Un%20indice%20n%C3%A9gatif%20permet%20de%20d%C3%A9compter%20la%20fin%20de%20la%20s%C3%A9quence%3A%20%60%5B-1%5D%60%20renvoit%20le%20dernier%20%C3%A9l%C3%A9ment.%0A%20%20%20%20-%20Pour%20une%20s%C3%A9quence%20de%20taille%20%60N%60%2C%20les%20indices%20vont%20de%20%600%60%20%C3%A0%20%60N-1%60.%0A%20%20%20%20-%20L'op%C3%A9rateur%20%60in%60%20permet%20le%20test%20d'appartenance.%0A%20%20%20%20-%20On%20peut%20acc%C3%A9der%20%C3%A0%20la%20taille%20d'une%20s%C3%A9quence%20avec%20la%20fonction%20%60len()%60.%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Slicing%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20Il%20est%20possible%20d'extraire%20tous%20les%20%C3%A9l%C3%A9ments%20d'une%20s%C3%A9quence%20entre%20les%20indices%20%60k%60%20(inclus)%20et%20%60l%60%20(exclus)%2C%20avec%20un%20espacement%20de%20%60pas%60%2C%20gr%C3%A0ce%20l'op%C3%A9rateur%20%60%5Bk%3Al%3Apas%5D%60.%20Par%20d%C3%A9faut%2C%20%60%5Bk%3Al%5D%60%20s%C3%A9lectionne%20tous%20les%20%C3%A9l%C3%A9ments%20d'indices%20entre%20%60k%60%20et%20%60l%60%3A%20La%20taille%20de%20cette%20tranche%20sera%20donc%20%60k-l%60.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20a)%20Les%20cha%C3%AEnes%20de%20caract%C3%A8res%0A%0A%20%20%20%20Nous%20les%20avons%20d%C3%A9j%C3%A0%20vues%2C%20il%20s'agit%20donc%20d'un%20exemple%20de%20conteneur%20que%20vous%20connaissez%20d%C3%A9j%C3%A0%2C%20et%20qui%20ne%20contient%20que%20des%20caract%C3%A8res.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20chaine%20%3D%20%22apprendre%22%0A%20%20%20%20print(chaine%5B3%5D)%0A%20%20%20%20print(chaine%5B-1%5D)%0A%20%20%20%20print(chaine%5B2%3A5%5D)%0A%20%20%20%20print(chaine%5B3%3A%5D)%20%23%20si%20on%20en%20pr%C3%A9cise%20rien%2C%20c'est%20%C3%A0%20partir%20de%203%20jusqu'%C3%A0%20la%20fin%0A%20%20%20%20print(chaine%5B%3A-3%5D)%20%23%20ou%20alors%20du%20d%C3%A9but%20jusqu'%C3%A0%20-3%20(exclus%20!)%0A%20%20%20%20print(chaine%5B-3%3A%5D)%20%23%20et%20%C3%A7a%20c'est%20le%20compl%C3%A9mentaire%20du%20pr%C3%A9c%C3%A9dent%0A%20%20%20%20print(chaine%5B0%3A%3A2%5D)%20%23%20tous%20les%20%C3%A9l%C3%A9ments%20d'indice%20pair%0A%20%20%20%20print(chaine%5B1%3A%3A2%5D)%20%23%20tous%20les%20%C3%A9l%C3%A9ments%20d'indice%20impair%0A%20%20%20%20return%20(chaine%2C)%0A%0A%0A%40app.cell%0Adef%20_(chaine)%3A%0A%20%20%20%20print('rendre'%20in%20chaine)%20%23%20la%20cha%C3%AEne%20'rendre'%20est%20bien%20dans%20'apprendre'%0A%20%20%20%20print('toto'%20in%20chaine)%20%23%20mais%20pas%20'toto'%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Immutabilit%C3%A9%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20Les%20cha%C3%AEnes%20de%20caract%C3%A8res%20sont%20des%20s%C3%A9quences%20_non%20mutables_%20(c'est-%C3%A0-dire%20qu'on%20ne%20peut%20pas%20les%20modifier).%20Il%20n'est%20donc%20pas%20possible%20de%20modifier%20une%20cha%C3%AEne%20de%20caract%C3%A8res%20autrement%20qu'en%20en%20cr%C3%A9ant%20une%20autre.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20chaine2%20%3D%20%22encore...%22%0A%20%20%20%20chaine2%5B3%5D%20%3D%20%22t%22%20%23%20erreur%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20chaine3%20%3D%20%22apprendre%22%0A%20%20%20%20print(chaine3%2C%20id(chaine3))%20%23%20apprendre%20et%20identifiant%0A%20%20%20%20chaine3%20%2B%3D%20%22%20%C3%A0%20compter%22%0A%20%20%20%20print(chaine3%2C%20id(chaine3))%20%23%20apprendre%20%C3%A0%20compter%20et%20id%20diff%C3%A9rent%20%3D%3D%3E%20une%20nouvelle%20chaine%20a%20%C3%A9t%C3%A9%20cr%C3%A9%C3%A9e%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20b)%20Les%20listes%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Listes%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Une%20_liste_%20est%20une%20collection%20_mutable_%20(modifiable)%20d%E2%80%99%C3%A9l%C3%A9ments%20%C3%A9ventuellement%20h%C3%A9t%C3%A9rog%C3%A8nes.%20S%E2%80%99ils%20sont%20de%20m%C3%AAme%20type%20on%20peut%20les%20ordonner.%20La%20taille%20d%E2%80%99une%20liste%20est%20dynamique.%20Une%20liste%20se%20d%C3%A9clare%20entre%20crochets%2C%20avec%20ses%20%C3%A9l%C3%A9ments%20s%C3%A9par%C3%A9s%20par%20des%20virgules%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20liste%20%3D%20%5Belt1%2C%20elt2%2C%20...%20%2C%20eltn%5D%0A%20%20%20%20%60%60%60%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20liste1%20%3D%20%5B'un'%2C%20-2.2%2C%205%5D%0A%20%20%20%20print(liste1)%0A%20%20%20%20liste1%5B1%5D%20%3D%201.3%20%23%20on%20modifie%20la%20liste%20!%0A%20%20%20%20print(liste1)%20%23%20noter%20que%20c'est%20le%20%22second%22%20%C3%A9l%C3%A9ment%20qui%20a%20%C3%A9t%C3%A9%20modifi%C3%A9%2C%20on%20compte%20%C3%A0%20partir%20de%200...%0A%20%20%20%20return%20(liste1%2C)%0A%0A%0A%40app.cell%0Adef%20_(liste1%2C%20x)%3A%0A%20%20%20%20liste2%20%3D%20%5Bx%2C%20True%2C%20liste1%2C%20'a'%2C%2012%5D%0A%20%20%20%20print(liste2)%20%23%20un%20des%20%C3%A9l%C3%A9ments%20est%20lui-m%C3%AAme%20une%20liste...%0A%20%20%20%20print(liste2%5B2%5D%5B1%5D)%20%23%20on%20acc%C3%A8de%20%C3%A0%20l'%C3%A9l%C3%A9ment%20d'indice%201%20de%20liste1%2C%20qui%20est%20elle-m%C3%AAme%20l'%C3%A9l%C3%A9ment%20d'indice%202%20de%20liste2%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Les%20listes%20sont%20donc%20des%20s%C3%A9quences%20modifiables%2C%20mais%20*attention*%20aux%20alias%3A%20on%20peut%20remarquer%20avec%20l'exemple%20suivant%20que%20%60liste%60%20a%20%C3%A9t%C3%A9%20modifi%C3%A9e.%20En%20effet%2C%20les%20identificateurs%20%60liste%60%20et%20%60listebis%60%20pointent%20en%20fait%20vers%20la%20m%C3%AAme%20liste%20en%20adresse%20m%C3%A9moire.%20Plus%20pr%C3%A9cis%C3%A9ment%2C%20%60listebis%60%20est%20un%20alias%20sur%20%60liste%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20liste%20%3D%20%5B'un'%2C%20-2.2%2C%205%5D%0A%20%20%20%20listebis%20%3D%20liste%0A%20%20%20%20print(%22liste%202%20%3D%20%22%2C%20listebis)%0A%20%20%20%20print(%22liste%201%20%3D%20%22%2C%20liste)%20%20%23%20jusque%20l%C3%A0%2C%20tout%20va%20bien%2C%20ce%20sont%20les%20m%C3%AAmes%20listes%0A%20%20%20%20listebis%5B1%5D%20%3D%201.3%0A%20%20%20%20print(%22liste%202%20%3D%20%22%2C%20listebis)%0A%20%20%20%20print(%22liste%201%20%3D%20%22%2C%20liste)%20%23%20cette%20liste%20aussi%20%C3%A0%20chang%C3%A9%20!%0A%20%20%20%20print(id(liste))%0A%20%20%20%20print(id(listebis))%20%23%20elles%20ont%20bien%20les%20m%C3%AAmes%20identifiants...%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20En%20pratique%2C%20on%20peut%20cr%C3%A9er%20une%20copie%20ind%C3%A9pendante%20d'une%20liste%20%C3%A0%20l'aide%20du%20slicing%20d%C3%A9crit%20plus%20haut%3A%20l'objet%20retourn%C3%A9%20par%20le%20slicing%20est%20une%20copie%2C%20pas%20juste%20de%20l'affichage.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20ma_liste%20%3D%20%5B1%2C%202%2C%203%2C%20%224%22%2C%205%2C%20False%2C%203.14%5D%0A%20%20%20%20ma_liste_copie%20%3D%20ma_liste%5B1%3A5%5D%0A%20%20%20%20print(ma_liste_copie)%0A%20%20%20%20ma_liste_copie%5B1%5D%20%3D%2012%0A%20%20%20%20print(ma_liste_copie)%0A%20%20%20%20print(ma_liste)%20%23%20elle%20n'a%20pas%20chang%C3%A9...%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Copie%20d'une%20liste%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20En%20pratique%2C%20on%20se%20sert%20de%20%60%5B%3A%5D%60%20pour%20copier%20rapidement%20l'int%C3%A9gralit%C3%A9%20d'une%20liste%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20ma_liste_copie%20%3D%20ma_liste%5B%3A%5D%0A%20%20%20%20%60%60%60%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20l%20%3D%20%5B1%2C%202%2C%203%2C%20%224%22%2C%205%2C%20False%2C%203.14%5D%0A%20%20%20%20l_copy%20%3D%20l%5B%3A%5D%0A%20%20%20%20print(l_copy)%0A%20%20%20%20l%5B1%5D%20%3D%2012%0A%20%20%20%20print(l_copy)%0A%20%20%20%20print(l)%20%23%20elle%20n'a%20pas%20chang%C3%A9...%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Voici%20maintenant%20quelques%20fonctions%20bien%20utiles%20en%20pratique%20quand%20on%20manipule%20des%20listes.%0A%0A%20%20%20%20%7C%20%20%20**Fonction**%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20**Effet**%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%3A---------------%3A%7C%3A-------------------------------------------------------------------------%3A%7C%0A%20%20%20%20%7C%20%20%20%60.append(x)%60%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ajoute%20%60x%60%20%C3%A0%20la%20fin%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60.extend(s)%60%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20concat%C3%A8ne%20la%20liste%20%60s%60%20%C3%A0%20la%20fin%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%60.insert(i%2C%20x)%60%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ajoute%20%60x%60%20en%20position%20%60i%60%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60.remove(x)%60%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20retire%20la%20premi%C3%A8re%20occurrence%20de%20%60x%60%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%20%20%60.pop()%60%20%20%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20retourne%20puis%20retire%20%E2%80%9Din%20place%E2%80%9D%20le%20dernier%20%C3%A9l%C3%A9ment%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%20%60.copy()%60%20%20%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20copie%20(comme%20%60%5B%3A%5D%60)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%20%60.sort()%60%20%20%20%20%7C%20ordonne%20%E2%80%9Din%20place%E2%80%9D%20(si%20tous%20les%20%C3%A9l%C3%A9ments%20sont%20du%20m%C3%AAme%20type%20avec%20un%20ordre)%20%7C%0A%20%20%20%20%7C%20%20%20%60.reverse()%60%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inverse%20%E2%80%9Din%20place%E2%80%9D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60.index(x)%60%20%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20retourne%20l%E2%80%99indice%20du%20premier%20%60x%60%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60.count(x)%60%20%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20retourne%20le%20nombre%20d%E2%80%99%C3%A9l%C3%A9ments%20%C3%A9gaux%20%C3%A0%20%60x%60%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20lizt%20%3D%20%5B%5D%0A%20%20%20%20lizt.append(6)%0A%20%20%20%20print(lizt)%0A%20%20%20%20lizt.extend(%5B5%2C%209%2C%203%5D)%0A%20%20%20%20print(lizt)%0A%20%20%20%20lizt.remove(9)%0A%20%20%20%20print(lizt)%0A%20%20%20%20lizt.insert(1%2C36)%0A%20%20%20%20print(lizt)%0A%20%20%20%20lizt.reverse()%0A%20%20%20%20print(lizt)%0A%20%20%20%20aa%20%3D%20lizt.pop()%0A%20%20%20%20print(%22aa%20%3D%22%2C%20aa)%20%23%20.pop()%20renvoie%20aussi%20la%20valeur%20retir%C3%A9e%0A%20%20%20%20print(lizt)%0A%20%20%20%20lizt.append(12)%0A%20%20%20%20print(lizt)%0A%20%20%20%20lizt.sort()%0A%20%20%20%20print(lizt)%0A%20%20%20%20return%20(lizt%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20%60min%60%20et%20%60max%60%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Si%20les%20%C3%A9l%C3%A9ments%20d%E2%80%99une%20liste%20sont%20de%20m%C3%AAme%20type%2C%20avec%20un%20ordre%2C%20on%20peut%20avoir%20le%20%60min%60%20et%20le%20%60max%60.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(lizt)%3A%0A%20%20%20%20min(lizt)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(lizt)%3A%0A%20%20%20%20max(lizt)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20max(%5B'a'%2C%20'c'%2C%20'z'%2C%20'af'%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20min(%5B'a'%2C%203%2C%20True%5D)%20%23%20erreur%2C%20tous%20les%20%C3%A9l%C3%A9ments%20ne%20sont%20pas%20de%20m%C3%AAme%20type...%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20peut%20%C3%A9galement%20construire%20des%20listes%20%C3%A0%20partir%20de%20cha%C3%AEnes%20de%20caract%C3%A8res.%20Par%20exemple%2C%20avec%20la%20fonction%20%60list()%60%20ou%20avec%20la%20fonction%20%60.split(sep)%60%20qui%20construit%20une%20liste%20d'articles%20s%C3%A9par%C3%A9s%20par%20%60sep%60%20dans%20la%20cha%C3%AEne%20initiale.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20ma_chaine%20%3D%20%22tomates%22%0A%20%20%20%20sa_liste%20%3D%20list(ma_chaine)%0A%20%20%20%20print(sa_liste)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mes_courses%20%3D%20%22tomates%2C%20pommes%2C%20poivrons%2C%20poireaux%2C%20citrons%22%0A%20%20%20%20liste_courses%20%3D%20mes_courses.split()%0A%20%20%20%20print(liste_courses)%20%23%20les%20espaces%20ont%20%C3%A9t%C3%A9%20conserv%C3%A9s...%0A%0A%20%20%20%20liste_nospace%20%3D%20mes_courses.split(%22%2C%20%22)%0A%20%20%20%20print(liste_nospace)%20%23%20en%20changeant%20le%20s%C3%A9parateur%20on%20peut%20faire%20sauter%20les%20espaces%20aussi%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20lizt1%20%3D%20%22un%3Bdeux%3Btrois%3Bquatre%22.split(%22%3B%22)%0A%20%20%20%20print(lizt1)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20lizt2%20%3D%20%22vous%20apprenez%20le%20langage%20Python%22.split(%22%20%22)%0A%20%20%20%20print(lizt2)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20lizt3%20%3D%20%22abbaabba%22.split(%22ba%22)%20%23%20la%20liste%20retourn%C3%A9e%20est%20toujours%20de%20taille%20n%2B1%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20o%C3%B9%20n%20est%20le%20nombre%20d'occurences%20du%20s%C3%A9parateur%0A%20%20%20%20print(lizt3)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20lizt4%20%3D%20%22abbaabba%22.split(%22c%22)%20%23%20le%20s%C3%A9parateur%20%22c%22%20n'est%20pas%20pr%C3%A9sent%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20donc%20on%20retourne%20une%20liste%20avec%20un%20seul%20%C3%A9l%C3%A9ment%2C%20la%20cha%C3%AEne%20toute%20enti%C3%A8re%0A%20%20%20%20print(lizt4)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Les%20compr%C3%A9hensions%20de%20listes%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Les%20compr%C3%A9hensions%20de%20liste%20sont%20une%20mani%C3%A8re%20concise%20de%20cr%C3%A9er%20des%20listes%20o%C3%B9%20chaque%20%C3%A9l%C3%A9ment%20est%20le%20r%C3%A9sultat%20d%E2%80%99une%20%22fonction%22%20appliqu%C3%A9e%20%C3%A0%20chaque%20membre%20d%E2%80%99un%20autre%20it%C3%A9rable%2C%20%C3%A9ventuellement%20en%20v%C3%A9rifiant%20une%20condition.%20La%20syntaxe%20g%C3%A9n%C3%A9rale%20est%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20liste%20%3D%20%5Bfunction(item)%20for%20item%20in%20iterable%20if%20condition%5D%0A%20%20%20%20%60%60%60%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Les%20deux%20exemples%20ci-dessous%20sont%20compl%C3%A8tement%20%C3%A9quivalents.%20Noter%20que%20la%20seconde%20fa%C3%A7on%20de%20construire%20la%20liste%20des%20carr%C3%A9s%20est%20plus%20compacte%2C%20et%20aussi%20plus%20lisible.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20encore_une_liste%20%3D%20%5B1%2C%203%2C%207%2C%2012%2C%2030%5D%0A%20%20%20%20carres%20%3D%20%5B%5D%0A%20%20%20%20for%20element%20in%20encore_une_liste%3A%0A%20%20%20%20%20%20%20%20carres.append(element**2)%0A%20%20%20%20print(carres)%0A%20%20%20%20return%20(encore_une_liste%2C)%0A%0A%0A%40app.cell%0Adef%20_(encore_une_liste)%3A%0A%20%20%20%20carres_comprehension%20%3D%20%5Belt**2%20for%20elt%20in%20encore_une_liste%5D%0A%20%20%20%20print(carres_comprehension)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Conversion%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20En%20pratique%2C%20on%20utilise%20beaucoup%20la%20compr%C3%A9hension%20de%20liste%20pour%20convertir%20les%20%C3%A9l%C3%A9ments%20d'une%20liste%20en%20un%20autre%20type.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20ma_liste_str%20%3D%20%5B%221%22%2C%20%222%22%2C%20%223.2%22%2C%20%22-4.7%22%5D%0A%20%20%20%20ma_liste_float%20%3D%20%5Bfloat(valeur)%20for%20valeur%20in%20ma_liste_str%5D%0A%20%20%20%20print(ma_liste_str)%20%20%20%23%20des%20cha%C3%AEnes%20de%20caract%C3%A8res%0A%20%20%20%20print(ma_liste_float)%20%23%20des%20floats%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Quand%20les%20fonction%20%C3%A0%20appliquer%20sont%20complexes%20(par%20exemple%20n%C3%A9cessitent%20plusieurs%20lignes%20de%20code)%20cela%20n'est%20pas%20forc%C3%A9ment%20souhaitable%20de%20proc%C3%A9der%20par%20compr%C3%A9hension%2C%20mais%20quand%20elles%20sont%20relativement%20simples%20c'est%20souvent%20plus%20clair%20et%20rapide%20de%20proc%C3%A9der%20ainsi.%20La%20compr%C3%A9hension%20reste%20un%20moyen%20tr%C3%A8s%20puissant%20de%20cr%C3%A9er%20des%20listes%20de%20diverses%20mani%C3%A8res...%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20carrespairs%20%3D%20%5Bx**2%20for%20x%20in%20range(1%2C10)%20if%20(x%252%20%3D%3D%200)%5D%0A%20%20%20%20print(carrespairs)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20math%20import%20pi%20%23%20on%20charge%20le%20module%20math%2C%20on%20en%20rediscutera%20plus%20tard...%0A%20%20%20%20arondipi%20%3D%20%5Bstr(round(pi%2Ci))%20for%20i%20in%20range(1%2C6)%5D%0A%20%20%20%20print('Nombre%20pi%20de%20plus%20en%20plus%20pr%C3%A9cis'%2C%20arondipi)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20ma_15eme_liste%20%3D%20%5B(x%2Cy)%20for%20x%20in%20%5B1%2C%202%2C%203%5D%20for%20y%20in%20%5B3%2C%201%2C%204%5D%20if%20x!%3Dy%5D%20%23%20(x%2Cy)%20est%20un%20tuple%2C%20cf%20plus%20bas%0A%20%20%20%20print(ma_15eme_liste)%0A%20%20%20%20ma_15eme_liste.sort()%0A%20%20%20%20print(ma_15eme_liste)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20matrix%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%5B1%2C%202%2C%203%2C%204%5D%2C%0A%20%20%20%20%20%20%20%20%5B5%2C%206%2C%207%2C%208%5D%2C%0A%20%20%20%20%20%20%20%20%5B9%2C%2010%2C%2011%2C%2012%5D%2C%0A%20%20%20%20%5D%20%23%20une%20liste%20de%20listes..%20c'est%20un%20peu%20une%20matrice%20en%20fait%20%3F%20on%20verra%20plus%20tard%20comment%20manipuler%20des%20(vraies)%20matrices%0A%0A%20%20%20%20%23%20on%20peut%20aussi%20imbriquer%20des%20compr%C3%A9hensions%20de%20listes%20!%0A%20%20%20%20print(%5B%5Brow%5Bi%5D%20for%20row%20in%20matrix%5D%20for%20i%20in%20range(4)%5D)%20%23%20c'est%20sa%20transpos%C3%A9e%20%3F%20%3Ao%0A%20%20%20%20print(matrix)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20c)%20Les%20tuples%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Tuples%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Un%20_tuple_%20est%20une%20collection%20_non%20mutable_%20(non%20modifiable)%20d%E2%80%99%C3%A9l%C3%A9ments%20%C3%A9ventuellement%20h%C3%A9t%C3%A9rog%C3%A8nes.%20S%E2%80%99ils%20sont%20de%20m%C3%AAme%20type%20on%20peut%20les%20ordonner.%20La%20taille%20d%E2%80%99un%20tuple%20est%20statique.%20Un%20tuple%20peut%20contenir%20des%20r%C3%A9f%C3%A9rences%20mutables.%20La%20syntaxe%20est%20la%20m%C3%AAme%20que%20pour%20les%20listes%2C%20avec%20des%20parenth%C3%A8ses%20%C3%A0%20la%20place%20des%20crochets.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20mon_tuple%20%3D%20(1%2C%202%2C%20%5B3%2C%204%2C%205%5D%2C%20%22tuple%22%2C%20%22p%22)%0A%20%20%20%20print(mon_tuple)%0A%20%20%20%20print(mon_tuple%5B1%5D)%0A%20%20%20%20print(len(mon_tuple))%20%23%20longueur%20du%20tuple%0A%20%20%20%20return%20(mon_tuple%2C)%0A%0A%0A%40app.cell%0Adef%20_(mon_tuple)%3A%0A%20%20%20%20mon_tuple%5B1%5D%20%3D%207%20%23%20erreur%2C%20on%20ne%20peut%20pas%20modifier%20un%20tuple...%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mon_tuple)%3A%0A%20%20%20%20mon_tuple%5B2%5D%5B1%5D%20%3D%20-36%20%23%20l'%C3%A9l%C3%A9ment%20d'indice%202%20est%20une%20liste%2C%20donc%20mutable%3A%20on%20peut%20le%20modifier%0A%20%20%20%20print(mon_tuple)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mon_tuple)%3A%0A%20%20%20%20mon_tuple.append(10)%20%23%20erreur%3A%20append%20n'existe%20pas%20pour%20les%20tuple%2C%20leur%20taille%20est%20statique%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Comme%20pour%20les%20listes%2C%20on%20peut%20cr%C3%A9er%20des%20tuples%20%C3%A0%20partir%20de%20collections%20avec%20la%20commande%20%60tuple()%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20print(tuple(%22Python%22))%0A%20%20%20%20print(tuple(%5B1%2C2%2C3%2C4%5D))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20tuple(1)%20%23%20erreur%2C%20l'entier%201%20n'est%20pas%20une%20collection...%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20Pour%20d%C3%A9finir%20un%20tupe%20%C3%A0%20un%20seul%20%C3%A9l%C3%A9ment%2C%20on%20utilise%20la%20commande%20%60(elt%2C)%60.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20je_ne_suis_pas_un_tuple%20%3D%20(%22toto%22)%0A%20%20%20%20print(je_ne_suis_pas_un_tuple)%0A%20%20%20%20tuple_tout_seul%20%3D%20(%22toto%22%2C)%0A%20%20%20%20print(tuple_tout_seul)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Pack%20et%20unpack%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20On%20peut%20%C3%A9galement%20d%C3%A9finir%20des%20tuples%20en%20Python%20via%20le%20packing%2Funpacking.%20C'est%20la%20m%C3%AAme%20proc%C3%A9dure%20derri%C3%A8re%20la%20d%C3%A9claration%20de%20plusieurs%20variables%20sur%20une%20seule%20ligne.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20my_tuple%20%3D%201.5%2C%202.7%20%23%20les%20deux%20valeurs%20sont%20emball%C3%A9es%20(packed)%20dans%20un%20seul%20tuple%0A%20%20%20%20print(type(my_tuple))%0A%20%20%20%20print(len(my_tuple))%0A%20%20%20%20print(my_tuple)%0A%20%20%20%20z1%2C%20z2%20%3D%20my_tuple%20%23%20les%20deux%20valeurs%20contenues%20dans%20le%20tuple%20sont%20d%C3%A9ball%C3%A9es%20(unpacked)%0A%20%20%20%20print(%22z1%20%3D%22%2C%20z1)%0A%20%20%20%20print(%22z2%20%3D%22%2C%20z2)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20nom%2C%20%C3%A2ge%2C%20profession%20%3D%20%22Nicolas%22%2C%2030%2C%20%22gardien%20de%20phare%22%20%23%20d%C3%A9claration%20de%203%20variables%20sur%20une%20seule%20ligne%0A%20%20%20%20print(%22nom%20%3A%20%22%2C%20nom)%0A%20%20%20%20print(%22%C3%A2ge%20%3A%20%22%2C%20%C3%A2ge)%0A%20%20%20%20print(%22profession%20%3A%20%22%2C%20profession)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20tuple_carres%20%3D%20%5B(x%2C%20x**2)%20for%20x%20in%20range(6)%5D%20%23%20on%20peut%20aussi%20faire%20des%20listes%20de%20tuples%20!%0A%20%20%20%20print(tuple_carres)%0A%20%20%20%20return%0A%0A%0Aapp._unparsable_cell(%0A%20%20%20%20r%22%22%22%0A%20%20%20%20tuple_carres%20%3D%20%5Bx%2C%20x**2%20for%20x%20in%20range(6)%5D%20%23%20mais%20attention%20%C3%A0%20ne%20pas%20oublier%20les%20parenth%C3%A8ses...%0A%20%20%20%20%22%22%22%2C%0A%20%20%20%20name%3D%22_%22%0A)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%202.2.%20Les%20tableaux%20associatifs%20(dictionnaires)%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Dictionnaires%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Un%20_tableau%20associatif_%20(ou%20_dictionnaire_)%20est%20une%20collection%20d%E2%80%99objets%20stock%C3%A9s%20par%20paires%20cl%C3%A9-valeur%20(key-value).%0A%20%20%20%20Les%20dictionnaires%20constituent%20des%20structures%20de%20donn%C3%A9es%20parmi%20les%20plus%20utilis%C3%A9es%20en%20Python.%20La%20syntaxe%20g%C3%A9n%C3%A9rale%20est%3A%0A%20%20%20%20%60%60%60%0A%20%20%20%20dictionnaire%20%3D%20%7Bkey1%3Avalue1%2C%20key2%3Avalue2%2C%20...%7D%0A%20%20%20%20%60%60%60%0A%20%20%20%20La%20cl%C3%A9%20dans%20la%20paire%20cl%C3%A9-valeur%20est%20un%20unique%20nom%20permettant%20d%E2%80%99identifier%20la%20valeur%2C%20qui%20peut%20%C3%AAtre%20de%20n'importe%20quel%20type.%20Les%20cl%C3%A9s%20et%20les%20valeurs%20n'ont%20pas%20besoin%20d'%C3%AAtre%20de%20m%C3%AAme%20type.%20Les%20dictionnaires%20sont%20des%20objets%20mutables%20(on%20peut%20modifier%20leurs%20%C3%A9l%C3%A9ments%2C%20en%20ajouter%2C%20etc.).%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20tailles%20%3D%20%7B175%20%3A%20%22Lucas%22%2C%20172%20%3A%20%22Fabien%22%2C%20160%20%3A%20%22Didier%22%2C%20165%20%3A%20%22Michael%22%7D%0A%20%20%20%20print(tailles%5B160%5D)%0A%20%20%20%20print(tailles)%0A%20%20%20%20tailles%5B221%5D%20%3D%20%22D%C3%A9sir%C3%A9%22%0A%20%20%20%20print(tailles)%0A%20%20%20%20return%20(tailles%2C)%0A%0A%0A%40app.cell%0Adef%20_(tailles)%3A%0A%20%20%20%20print(tailles%5B190%5D)%20%23%20erreur%2C%20la%20cl%C3%A9%20190%20n'existe%20pas%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20capitales%20%3D%20%7B%22France%22%20%3A%20%22Paris%22%2C%20%22Espagne%22%20%3A%20%22Madrid%22%2C%20%22Belgique%22%20%3A%20%22Bruxelles%22%2C%20%22Italie%22%20%3A%20%22Rome%22%7D%0A%20%20%20%20print(capitales)%0A%20%20%20%20print(capitales%5B%22Espagne%22%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20On%20peut%20%C3%A9galement%20d%C3%A9finir%20des%20dictionnaires%20en%20remplissant%20un%20dictionnaire%20initialement%20vide%2C%20ou%20alors%20avec%20la%20commande%20%60dict()%60%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20t1%20%3D%20%7B%7D%0A%20%20%20%20t1%5B175%5D%20%3D%20%22Arthur%22%0A%20%20%20%20t1%5B165%5D%20%3D%20%22Kylian%22%0A%20%20%20%20t1%5B221%5D%20%3D%20%22Ousmane%22%0A%20%20%20%20print(t1)%20%23%20pas%20tr%C3%A8s%20judicieux%20de%20mettre%20les%20tailles%20en%20cle%2C%20deux%20personnes%20pourraient%20avoir%20la%20m%C3%AAme%20taille...%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20t2%20%3D%20dict(Arthur%20%3D%20175%2C%20Kylian%20%3D%20165%2C%20Ousmane%20%3D%20221)%20%23%20notez%20qu'on%20a%20invers%C3%A9%20les%20clefs%20et%20les%20valeurs%20entre%20t2%20et%20t1%0A%20%20%20%20print(t2)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20t3%20%3D%20dict(%5B(%22Arthur%22%2C%20175)%2C%20(%22Kylian%22%2C%20165)%2C%20(%22Ousmane%22%2C%20221)%5D)%0A%20%20%20%20print(t3)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Boucle%20%60for%60%20et%20dictionnaires%0A%20%20%20%20%20%20%20%20type%3A%20warning%0A%0A%20%20%20%20La%20boucle%20%60for%60%20permet%20de%20parcourir%20les%20cl%C3%A9s%20d'un%20dictionnaire%2C%20dans%20un%20ordre%20arbitraire.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(tailles)%3A%0A%20%20%20%20print(tailles)%0A%20%20%20%20for%20cle%20in%20tailles%3A%0A%20%20%20%20%20%20%20%20print(tailles%5Bcle%5D)%20%23%20cle%20n'a%20pas%20parcouru%20les%20tailles%20dans%20un%20ordre%20sp%C3%A9cifique%2C%20m%C3%AAme%20si%20se%20sont%20des%20int%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Les%20dictionnaires%20sont%20des%20structures%20de%20donn%C3%A9es%20mutables%2C%20comme%20les%20listes.%20On%20peut%20ainsi%20ajouter%20une%20paire%20de%20cl%C3%A9-valeur%2C%20ou%20bien%20en%20supprimer%20avec%20la%20commande%20%60del()%60.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20cap%20%3D%20%7B%22France%22%20%3A%20%22Paris%22%2C%20%22Espagne%22%20%3A%20%22Madrid%22%2C%20%22Belgique%22%20%3A%20%22Bruxelles%22%2C%20%22Italie%22%20%3A%20%22Rome%22%7D%0A%20%20%20%20print(cap)%0A%20%20%20%20cap%5B%22Portugal%22%5D%20%3D%20%22Lisbonne%22%0A%20%20%20%20print(cap)%0A%20%20%20%20del(cap%5B%22France%22%5D)%0A%20%20%20%20print(cap)%0A%20%20%20%20return%20(cap%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20%60get()%60%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20La%20fonction%20%60.get(cle)%60%20retourne%20la%20valeur%20associ%C3%A9e%20%C3%A0%20%60cle%60%20si%20elle%20existe%2C%20la%20valeur%20d%C3%A9finie%20par%20d%C3%A9faut%20(initialement%20None)%20sinon.%20Cette%20fonction%20permet%20donc%20de%20ne%20pas%20afficher%20une%20erreur%20si%20la%20cl%C3%A9%20demand%C3%A9e%20ne%20fait%20pas%20partie%20du%20dictionnaire.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cap)%3A%0A%20%20%20%20print(cap%5B%22Allemagne%22%5D)%20%23%20erreur%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cap)%3A%0A%20%20%20%20print(cap.get(%22Belgique%22))%0A%20%20%20%20print(cap.get(%22Allemagne%22))%20%23%20pas%20d'erreur%2C%20pratique%20pour%20%C3%A9viter%20de%20faire%20crasher%20un%20code%20!%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%0A%20%20%20%20%20%20%20%20type%3A%20tip%0A%0A%20%20%20%20Les%20fonctions%20%60.keys()%60%2C%20%60.values()%60%2C%20%60.items()%60%20retournent%20des%20it%C3%A9rables%20(pas%20des%20listes)%20contenant%20respectivement%20les%20cl%C3%A9s%2C%20les%20valeurs%20et%20des%20tuples%20cl%C3%A9-valeur.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(tailles)%3A%0A%20%20%20%20noms%20%3D%20tailles.keys()%0A%20%20%20%20tailles_associ%C3%A9es%20%3D%20tailles.values()%0A%20%20%20%20mes_paires%20%3D%20tailles.items()%0A%20%20%20%20print(noms)%0A%20%20%20%20print(tailles_associ%C3%A9es)%0A%20%20%20%20print(mes_paires)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%202.3.%20Les%20ensembles%0A%0A%20%20%20%20%2F%2F%2F%20admonition%20%7C%20Ensembles%0A%20%20%20%20%20%20%20%20type%3A%20note%0A%0A%20%20%20%20Un%20_ensemble_%20(_set_%20en%20anglais)%20est%20un%20collection%20non%20ordonn%C3%A9e%20d%E2%80%99%C3%A9l%C3%A9ments%20uniques.%20Il%20permet%20de%20supprimer%20les%20doublons%20d%E2%80%99une%20s%C3%A9quence%2C%20ou%20de%20cr%C3%A9er%20des%20unions%2C%20intersections%20et%20diff%C3%A9rences%20entre%20deux%20s%C3%A9quences.%20Il%20y%20a%20en%20Python%20deux%20types%20d'ensembles%3A%20les%20ensembles%20modifiables%20(%60set()%60)%20et%20les%20ensembles%20non-modifiables%20(%60frozenset()%60).%20C'est%20la%20m%C3%AAme%20diff%C3%A9rence%20qu'entre%20les%20listes%20et%20les%20tuples.%0A%20%20%20%20%2F%2F%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20S1%20%3D%20set(%5B%22pomme%22%2C%20%22poire%22%2C%20%22citron%22%2C%20%22pomme%22%5D)%20%0A%20%20%20%20print(S1)%20%23%20%22pomme%22%20n'appara%C3%AEt%20qu'une%20seule%20fois%20!%0A%20%20%20%20S2%20%3D%20set(%22pomme%22)%0A%20%20%20%20print(S2)%20%23%20la%20cha%C3%AEne%20de%20caract%C3%A8res%20est%20devenue%20un%20ensemble%2C%20en%20ne%20comptant%20les%20lettres%20qu'une%20seule%20fois.%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20S3%20%3D%20set(%5B1%2C2%2C1%2C3%2C4%2C5%2C7%2C3%5D)%0A%20%20%20%20print(S3)%0A%20%20%20%20S3.add(34)%0A%20%20%20%20print(S3)%0A%20%20%20%20S3.add(2.0)%0A%20%20%20%20print(S3)%0A%20%20%20%20S3.remove(3)%0A%20%20%20%20print(S3)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20S4%20%3D%20frozenset(%5B4%2C5%2C6%5D)%0A%20%20%20%20S4.add(7)%20%23%20erreur%2C%20S4%20est%20non%20mutable%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20On%20peut%20%C3%A9galement%20effectuer%20la%20plupart%20des%20op%C3%A9rations%20que%20l'on%20r%C3%A9alise%20en%20math%C3%A9matiques%20entre%20des%20ensembles.%0A%0A%20%20%20%20%7C%20%20%20%20%20%20%20%20%20%20%20**Fonction**%20%20%20%20%20%20%20%20%7C%20%20%20%20**Alternative**%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20**Effet**%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%3A-----------------------------%3A%7C%3A-------------------%3A%7C%3A-------------------------------------------------------%3A%7C%0A%20%20%20%20%7C%20%20%20%60s.union(t)%60%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%20%20%20%20%60s%7Ct%60%20%20%20%20%20%20%20%20%20%20%7C%20%20%20%20union%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60s.intersection(t)%60%20%20%20%20%20%20%20%20%20%7C%20%20%20%20%20%20%60s%26t%60%20%20%20%20%20%20%20%20%20%20%7C%20%20%20%20intersection%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60s.difference(t)%60%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%20%20%20%20%60s-t%60%20%20%20%20%20%20%20%20%20%20%7C%20%20%20%20diff%C3%A9rence%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60s.symetric_difference(t)%60%20%20%7C%20%20%20%20%20%20%60s%5Et%60%20%20%20%20%20%20%20%20%20%20%7C%20%20%20%20diff%C3%A9rence%20sym%C3%A9trique%20(dans%20l'un%20ou%20l'autre%20mais%20pas%20les%20deux%20%C3%A0%20la%20fois)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60s.isdisjoint(t)%60%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%20%20teste%20la%20disjonction%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60s.issubset(t)%60%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%60s%60%20%24%5Csubset%24%20%60t%60%20%20%7C%20%20%20%20teste%20si%20%60s%60%20est%20inclus%20dans%20%60t%60%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%7C%20%20%20%60s.issuperset(t)%60%20%20%20%20%20%20%20%20%20%20%20%7C%20%20%60s%60%20%24%5Csupset%24%20%60t%60%20%20%7C%20%20%20%20teste%20si%20%60s%60%20contient%20%60t%60%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20X%20%3D%20set('spam')%0A%20%20%20%20Y%20%3D%20set('pass')%0A%20%20%20%20print(X)%0A%20%20%20%20print(Y)%0A%20%20%20%20return%20X%2C%20Y%0A%0A%0A%40app.cell%0Adef%20_(X%2C%20Y)%3A%0A%20%20%20%20print('p'%20in%20X)%0A%20%20%20%20print('m'%20in%20Y)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X%2C%20Y)%3A%0A%20%20%20%20print(X%20-%20Y)%0A%20%20%20%20print(X.difference(Y))%0A%20%20%20%20print(Y%20-%20X)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X%2C%20Y)%3A%0A%20%20%20%20print(X%20%5E%20Y)%0A%20%20%20%20print(X.symmetric_difference(Y))%0A%20%20%20%20print(X%20%7C%20Y)%0A%20%20%20%20print(X.union(Y))%0A%20%20%20%20print(X%20%26%20Y)%0A%20%20%20%20print(X.intersection(Y))%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(X%2C%20Y)%3A%0A%20%20%20%20print(X.isdisjoint(Y))%0A%20%20%20%20print(Y.issubset(X))%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%202.4.%20Structurer%20ses%20donn%C3%A9es%0A%0A%20%20%20%20On%20commence%20donc%20%C3%A0%20voir%20l'%C3%A9tendue%20des%20possibilit%C3%A9s%20quand%20on%20veut%20structurer%20les%20donn%C3%A9es%20que%20l'on%20manipule.%20Il%20est%20recommand%C3%A9%2C%20avant%20d'%C3%A9crire%20un%20code%20ou%20un%20algorithme%2C%20de%20toujours%20se%20demander%20quelle%20est%20la%20structure%20la%20plus%20adapt%C3%A9e.%20Voici%20quelques%20%C3%A9l%C3%A9ments%20d'aide%20%C3%A0%20la%20d%C3%A9cision%20entre%20liste%2C%20tuple%20et%20dictionnaire%20(les%20ensembles%20sont%20globalement%20moins%20utilis%C3%A9s).%0A%0A%20%20%20%20Choisir%20une%20_liste_%20lorsque%20%3A%0A%20%20%20%20-%20Les%20donn%C3%A9es%20manipul%C3%A9es%20ont%20un%20ordre%20naturel%0A%20%20%20%20-%20On%20a%20besoin%20de%20mettre%20%C3%A0%20jour%20les%20donn%C3%A9es%20ou%20de%20les%20modifier%20dans%20le%20programme%0A%20%20%20%20-%20On%20a%20besoin%20de%20r%C3%A9aliser%20des%20it%C3%A9rations%20dans%20les%20donn%C3%A9es%0A%0A%20%20%20%20Choisir%20un%20_tuple_%20lorsque%20%3A%0A%20%20%20%20-%20Les%20donn%C3%A9es%20manipul%C3%A9es%20ont%20un%20ordre%20naturel%0A%20%20%20%20-%20On%20n%E2%80%99a%20pas%20besoin%20de%20mettre%20%C3%A0%20jour%20les%20donn%C3%A9es%2C%20ni%20de%20les%20modifier%20dans%20le%20programme%0A%20%20%20%20-%20On%20a%20besoin%20de%20r%C3%A9aliser%20des%20it%C3%A9rations%20dans%20les%20donn%C3%A9es%0A%0A%20%20%20%20Choisir%20un%20_dictionnaire_%20lorsque%20%3A%0A%20%20%20%20-%20Les%20donn%C3%A9es%20manipul%C3%A9es%20n%E2%80%99ont%20pas%20d%E2%80%99ordre%20naturel%20ou%20l%E2%80%99ordre%20n%E2%80%99a%20pas%20d%E2%80%99importance%0A%20%20%20%20-%20On%20a%20besoin%20de%20mettre%20%C3%A0%20jour%20les%20donn%C3%A9es%2C%20ou%20de%20les%20modifier%20dans%20le%20programme%0A%20%20%20%20-%20La%20valeurs%20des%20donn%C3%A9es%20ont%20une%20grande%20importance%20(par%20exemple%2C%20les%20r%C3%A9sultats%20d'une%20simulation)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%202.5.%20_Shallow%20copy_%20et%20_deep%20copy_%0A%0A%20%20%20%20On%20termine%20cette%20section%20par%20un%20interlude%20important%20sur%20les%20subtilit%C3%A9s%20de%20Python%20concernant%20les%20affectations.%20On%20a%20d%C3%A9j%C3%A0%20rapidement%20mentionn%C3%A9%20la%20diff%C3%A9rence%20entre%20une%20vue%20sur%20une%20liste%20(m%C3%AAme%20adresse%20m%C3%A9moire)%20et%20une%20copie%20compl%C3%A8te.%20En%20Python%2C%20on%20distingue%20en%20fait%20_deux_%20types%20de%20copies%20diff%C3%A9rentes%2C%20que%20l'on%20d%C3%A9taille%20ci-dessous.%0A%0A%20%20%20%20Commen%C3%A7ons%20d%C3%A9j%C3%A0%20par%20rappeler%20le%20comportement%20des%20listes%20quand%20on%20ne%20partage%20que%20la%20vue%20vers%20l'adresse%20m%C3%A9moire%20des%20%C3%A9l%C3%A9ments.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20fable%20%3D%20%5B%22Je%22%2C%20%22plie%22%2C%20%22mais%22%2C%20%22ne%22%2C%20%22romps%22%2C%20%22point%22%5D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20phrase%20%3D%20fable%20%23%20on%20a%20d%C3%A9j%C3%A0%20vu%20que%20l'affectation%20ne%20cr%C3%A9%C3%A9%20ici%20qu'une%20vue%0A%20%20%20%20phrase%5B4%5D%20%3D%20%22casse%22%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20print(fable)%20%23%20%5B'Je'%2C%20'plie'%2C%20'mais'%2C%20'ne'%2C%20'casse'%2C%20'point'%5D%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Si%20on%20veut%20pouvoir%20faire%20des%20modifications%20s%C3%A9par%C3%A9es%2C%20il%20faut%20r%C3%A9aliser%20une%20copie%20_distincte_%20de%20l'objet.%20En%20Python%2C%20on%20peut%20distinguer%202%20types%20de%20copies%20%3A%0A%20%20%20%20-%20_shallow%20copy_%20ou%20copie%20superficielle%0A%20%20%20%20-%20_deep%20copy_%20ou%20copie%20profonde%0A%0A%20%20%20%20Ces%202%20notions%20sont%20diff%C3%A9rentes%20pour%20des%20objets%20compos%C3%A9s%20(objets%20d'objets)%20en%20effet%20%3A%0A%20%20%20%20-%20pour%20la%20shallow%20copy%2C%20on%20cr%C3%A9e%20une%20copie%20de%20l'objet%20compos%C3%A9%20qui%20va%20contenir%20des%20r%C3%A9f%C3%A9rences%20(pointeurs)%20vers%20les%20objets%20qui%20le%20composent%0A%20%20%20%20-%20la%20deep%20copy%20est%20_totale_%20car%20les%20sous-objets%20sont%20eux%20aussi%20copi%C3%A9s%20totalement%20et%20non%20seulement%20donn%C3%A9s%20comme%20des%20r%C3%A9f%C3%A9rences%20sur%20les%20originaux.%0A%0A%20%20%20%20Vous%20voyez%20la%20%22subtilit%C3%A9%22%20%3F%20Pour%20acc%C3%A9der%20%C3%A0%20la%20deepcopy%2C%20il%20faut%20le%20module%20%60copy%60%20(on%20verra%20plus%20tard%20comment%20charger%20des%20modules).%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20copy%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%0A%20%20%20%20A%20%3D%20list(range(3))%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20B%20%3D%20A%20%23%20ceci%20n'est%20pas%20une%20%22vraie%20copie%22%20mais%20une%20simple%20r%C3%A9f%C3%A9rence%2C%20comme%20%C3%A9voqu%C3%A9%0A%20%20%20%20B.append(4)%0A%20%20%20%20print(%22B%20%3D%22%2C%20B)%0A%20%20%20%20print(%22A%20%3D%22%2C%20A)%20%23%20A%20est%20modifi%C3%A9%2C%20comme%20attendu%0A%20%20%20%20%23%20ceci%20est%20une%20copie%20simple%2C%20%C3%A9quivalent%20%C3%A0%20a.copy()%2C%20et%20g%C3%A9n%C3%A8e%20un%20shallow%20copy%20(pas%20une%20deep!)%0A%20%20%20%20%23%20m%C3%AAme%20si%20dans%20ce%20cas%20simple%20d'objet%20(i.e.%20non%20compos%C3%A9)%20la%20diff%C3%A9rence%20est%20faible%0A%20%20%20%20C%20%3D%20A%5B%3A%5D%0A%0A%20%20%20%20C.append(5)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20print(%22C%20%3D%22%2C%20C)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20D%20%3D%20copy.copy(A)%20%23%20shallow%20copy%20avec%20le%20module%20copy%0A%20%20%20%20D.append(6)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20print(%22D%20%3D%22%2C%20D)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20print(%22rappel%20de%20ce%20que%20vaut%20A%3A%22%2C%20A)%20%23%20A%20n'a%20pas%20chang%C3%A9%20car%20C%20et%20D%20on%20%C3%A9t%C3%A9%20cr%C3%A9%C3%A9%20avec%20une%20(shallow)%20copy%20!%0A%20%20%20%20return%20(copy%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20Illustrer%20la%20diff%C3%A9rence%20entre%20_shallow_%20et%20_deep_%20est%20plus%20subtil...%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(copy)%3A%0A%20%20%20%20ob1%20%3D%20%5B(%22mon%22%2C4)%2C%20('bateau'%2C7)%2C%20(%22est%22%2C9)%5D%0A%20%20%20%20ob2%20%3D%20%5B(%22vert%22%2C2)%2C%20('yohoh!'%2C3)%5D%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20liste_objets%20%3D%20%5Bob1%2C%20ob2%5D%20%20%23%20une%20liste%20d'objets%20(objet%20d'objets%20donc%2C%20c'ets%20l%C3%A0%20que%20%C3%A7a%20se%20joue)%0A%20%20%20%20print(%22liste_objets%22%2C%20liste_objets)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20liste_obj_shal%20%3D%20liste_objets.copy()%20%20%20%20%20%20%20%20%20%23%20shallow%20copy%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20liste_obj_deep%20%3D%20copy.deepcopy(liste_objets)%20%23%20deepcopy%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20print(%22liste_shal%20%20%22%2Cliste_obj_shal)%20%20%20%20%20%20%20%20%20%23%20affiche%20pour%20voir%20si%20%C3%A7a%20va%20changer%0A%20%20%20%20liste_obj_ref%20%3D%20liste_objets%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20liste_obj_ref%5B0%5D%5B0%5D%20%3D%20(%22notre%22%2C6)%20%20%20%20%23%20%C3%A7a%20va%20modifier%20original%20et%20shallow%20mais%20pas%20deep%20!%20cf%20dessous%0A%20%20%20%20print(%22liste_objets%22%2Cliste_objets)%20%20%20%23%20a%20%C3%A9t%C3%A9%20modifi%C3%A9e%20par%20l'acc%C3%A8s%20via%20liste_obj_ref%0A%20%20%20%20print(%22liste_shal%20%20%22%2Cliste_obj_shal)%20%23%20a%20%C3%A9t%C3%A9%20modifi%C3%A9e%20car%20le%20sous%20objet%20est%20une%20adresse%0A%20%20%20%20print(%22liste_deep%20%20%22%2Cliste_obj_deep)%20%23%20vrai%20deep%2C%20lui%2C%20a%20copi%C3%A9%20avant%20la%20modif%20et%20n'est%20pas%20touch%C3%A9%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
1045406fabd457767ac89cfdc06fe3ab