Les types construits en Python
Retour sur les chaines de caractères⚓︎
On a déjà rencontré les chaines de caractères en Python, elles s'écrivent entre guillemets (") ou apostrophes (') et sont constituées d'une séquence de caractères auxquels on peut accéder directement grâce à leur indice (ou index) c'est-à-dire leur numéro à partir de 0 en utilisant la notation []. Par exemple,
| Python | |
|---|---|
len. Par exemple len("PCSI") vaut 4. Les indices des caractères d'une chaine c vont de 0 à len(c)-1. Un accès au-delà de l'indice len(c)-1 provoquera une erreur (IndexError).
Note
On retiendra notamment que le dernier caractère d'une chaine c est celui d'indice len(c)-1
Note
Les valeurs négatives d'indice sont acceptées en Python et sont alors considérés comme une numérotation à partir de \(-1\) et depuis la fin de la chaine. c'est-à-dire que c[-1] est le dernier caractère de la chaine c, c[-2] son avant dernier, etc ..
L'accès aux caractères via la notation [] associé à une boucle for, permet d'effectuer un parcours d'une chaine de caractères afin de "sélectionner" un à un les caractères et éventuellement d'effectuer un traitement sur ces caractères. Typiquement, sur une chaine c, cette boucle prend la forme suivante : for i in range(len(c)) puisqu'alors la variable i prend les valeurs allant de 0 à len(c)-1")}} (inclus) ce qui correspond bien aux domaine valide des indices d'une chainec`.
Par exemple, supposons qu'on veuille écrire une fonction permettant de compter le nombre de voyelles dans une chaine de caractères (écrite en majuscules), on pourrait écrire :
-
Ecrire une fonction
est_dansqui prend en argument une chaine de caractèreschaineet un caractèrecet qui renvoieTruesicest dans chaine etFalsesinon.Aide
On rappelle que l'instruction
returnpermet de quitter immédiatement une boucle. -
Mofifier la fonction précédente afin qu'elle renvoie l'indice de la première occurence de
cdanschaineou \(-1\) sicn'apparaît pas dans chaine.
Ecrire une fonction compte_occurence qui prend en argument une chaine de caractères chaine et un caractère c et qui renvoie le nombre d'apparitions de c dans chaine. Par exemple compte_occurence("magnifique","i") renvoie 2.
En informatique, chaque caractère est associé à un entier : son code unicode, par exemple le code unicode du caractère A est 65. En Python, pour obtenir le code unicode d'un caractère on utilise la fonction ord, ainsi ord('A') vaut 65. Déterminer la somme de tous les codes unicode des caractères de la phrase "L'informatique en PCSI, c'est vraiment le top !" ?
Attention : les guillemets ne font pas partie de la phrase.
Remarques
- En tapant
ord("A")dans le terminal ci-dessous vous pouvez vérifier qu'on obtient bien 65. - L'unicode étend le code
asciiqui est parfois plus connu. En effet, lorsque le codeasciid'un caractère existe, il correspond à son code unicode. Ainsi le codeasciideAexiste (et vaut donc aussi 65), maisùn'est pas un caractèreasciiet n'a donc pas de codeasciimais a bien un code unicode : 249.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Ecrire une fonction identiques qui prend en argument deux chaines de caractères c1 et c2 et renvoie le nombre de fois où c1 et c2 ont le même caractère au même indice. Par exemple identiques("python","poterie") renvoie 2 car ces deux chaines coïndicent à l'indice 0 (un p) et à l'indice 2 (un t).
Important
A noter qu'on peut accéder aux caractères d'une chaine mais pas les modifier ! Par exemple l'instruction de la ligne 2 ci-dessous provoque une erreur : TypeError: 'str' object does not support item assignment
Tranches⚓︎
Une tranche (en anglais slice) d'une chaine de caractères s'obtient en donnant les indices de départ (compris) et de fin (exclu) séparé par le caractère : entre crochets. Par exemple, si on considère la chaine `exemple = 'Bonjour'")}} dont on donne les indices des caractères ci-dessous :
exemple[0:3]")}} vaut"Bon"`exemple[3:7]")}} vaut"jour"`exemple[3:5]")}} vaut"jo"`
A noter que :
- si le début de tranche n'est pas précisé alors la tranche démarre au début de la chaine, par exemple
exemple[:5]")}} vaut"Bonjo"` - si la fin de la tranche n'est pas précisée alors elle se termine à la fin de la chaine, par exemple
exemple[4:]")}} vaut"our"` - et donc en précisant ni le début ni la fin, la tranche est la chaine complète, par exemple
exemple[:]")}} vaut"Bonjour"`
De la même façon que l'instruction range, une tranche accepte un troisième paramètre optionnel qui indique un pas de progression dans la récupération des caractères de la chaine. Par exemple, exemple[::2]")}} vaut"Bnor"car on ne récupère que les caractères situés aux indices0, 2, 4et6`.
Note
Les pas négatifs sont possibles, par conséquent exemple[::-1]")}} signifie par exemple récupérer tous les caractères à partir de la fin jusqu'au début et donc inverse l'ordre des caractères pour créer une nouvelle chaine qui vaut"ruojnoB"`.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Tuples⚓︎
De la même façon, qu'une chaine de caractères est une séquence de caractères repérés par des indices, un tuple est une séquence de valeur (de type quelconque) repéré par des indices. Par exemple :
- `coordonnees = (3.2, -5.8, 7.0)")}}
- `notes = (12, 4, 7, 11, 13, 15)")}}
anniversaire = (31, "Janvier", 1956)voyelles = ("a","e","i","o","u","y")reponses = (True, False, False, True, False)
Les éléments d'un tuple peuvent donc être de n'importe quel type et comme dans le troisième exemple être de types différents.
Ce qui a été vu sur les chaines de caractères reste en grande partie valide sur les tuples, notamment :
- on accède aux éléments d'un tuple avec la notation
[], on peut donc parcourir les éléments d'un tuple à l'aide d'une bouclefor. Par, exemplemois = anniversaire[1] - on ne peut pas modifier les éléments d'un tuple. Par exemple
anniversaire[1] = 1provoque une erreurTypeError - la fonction
lenrenvoie le nombre de valeurs présentes dans le tuple. Par exemplelen(anniversaire)renvoie 3. - la syntaxe des tranches est identique mais une tranche de tuple est un tuple. Par exemple
notes[:3]renvoie(12,4,7).
La particularité des tuples est de pouvoir être décompacté afin que chaque élément soit affecté à une valeur, par exemple :
x, y, z = coordonneesva affecter3.2àx,-5.8àyet7.0àzmois, jour, annee = anniversaireva affecter31à jour,"Janvier"àmoiset1956àannee.
Danger
Décompacter un tuple sans prévoir autant de variables que d'éléments dans le tuple provoque une erreur ValueError.
Ecrire une fonction prenant en argument un tuple d'entiers de longueur strictement positive et qui renvoie la moyenne des valeurs de ce tuple.
Itérables⚓︎
Les chaines de caractères et les tuples sont tous deux des itérables de Python c'est-à-dire qu'on peut les parcourir directement à l'aide d'une boucle for qui prend alors la syntaxe suivante : for <element> in <iterable>, notez bien l'absence de range. Dans ce cas, la variable de parcours n'est pas un entier (contrairement à la version avec range) mais directement les valeurs de l'itérable.
A retenir
- Avec la syntaxe
for <indice> in range(<entier>), on effectue le parcours d'un itérable par indice. - Avec la syntaxe
for <element> in <iterable>, on effectue le parcours d'un itérable par valeur. - Exemples :
for i in range(len("Bonjour")), la variable de parcours est l'indice des caractères successif de la chaine et donc prend les valeurs0,1,...,6for lettre in "Bonjour", la variable de parcours est directement un caractère de la chaine et donc prend les valeurs'B', 'o', ..., 'r'
Reprendre les deux exercices ci-dessous en effectuant obligatoirement un parcours par élément dans l'écriture de la fonction.
-
Ecrire une fonction
est_dansqui prend en argument une chaine de caractèreschaineet un caractèrecet qui renvoieTruesicest dans chaîne etFalsesinon. -
Ecrire une fonction prenant en argument un tuple d'entiers de longueur strictement positive et qui renvoie la moyenne des valeurs de ce tuple.
Non mutabilité⚓︎
En Python, certains types de variables sont dits non mutables, cela signifie notamment que ces variables ne seront pas modifiées dans les fonctions qui les utilisent. Tout se passe comme si une copie de la variable était envoyée à la fonction, les modification sur la copie (dans la fonction) n'affecteront pas l'original (dans le bloc qui appelle la fonction).
Par exemple :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
A retenir
Les types suivants de Python sont non mutables : int, float, bool, str, tuple, on ne modifie pas une variable de ce type en la passant à une fonction.
A noter que si on souhaite modifier une valeur non mutable, on peut la passer à une fonction et lui affecter la valeur renvoyée par cette fonction. Par exemple, pour incrémenter une variable de type int on pourrait écrire :
Par exemple :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Les listes de Python⚓︎
Les listes de Python sont des séquences de valeurs modifiables repérées (comme les tuples et les chaines de caractères) par leur indice. Elles se notent entre crochets et les valeurs sont séparées par des virgules. Par exemple,
- `temperatures = [24, 26, 26, 28, 28, 30, 29, 27, 27]")}}
anniversaire = [23, "Juin", 1912]points = [("A",-2,3),("B",2,7),("C",1,0)]
On retrouve sur les listes les mêmes fonctionnalités vu sur les tuples (et les chaines de caractères) :
- longueur avec
len - accès à l'élément d'indice
ide la listelgrâce à la syntaxel[i] - syntaxe d'extraction des tranches
- parcours par élément avec
inou parcours par indice avecrange
De plus au contraire des tuples, les valeurs présentes dans une liste sont modifiables, par exemple :
| Python | |
|---|---|
D'autre part les deux opérations suivantes sont possibles sur les listes (on fera bien attention à la syntaxe et notamment à l'absence de =) :
- ajouter un élément à la fin de la liste grâce à
append, pour ajouterxà la fin de la listel, on écritl.append(x) - supprimer le dernier élément d'un liste grâce à
pop, pour supprimer le dernier élément de la listel, on écritl.pop() - l'instruction précédente (c'est-à-dire
l.pop()) renvoie l'élément supprimé, on peut donc le récupérer par exemple pour l'affecter à une variable et écrire par exemple :dernier = l.pop()
On considère la liste de courses ci-dessous :
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
- En utilisant la notation
[], remplacer les oranges par des pommes. - Ecrire une instruction permettant d'ajouter
"riz"à cette liste. - Ecrire les instructions permettant de supprimer l'avant-dernier élément de cette liste.
Mutables⚓︎
Au contraire des autres types de variables rencontrées auparavant, les listes de Python (type list) sont mutables, une des conséquences importantes est qu'elles sont modifiées lorsqu'on les passe à une fonction. Par exemple
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Autre conséquence, si l est une liste et qu'on écrit m = l, toute modification de l, modifie m. Par exemple :
| Python | |
|---|---|
Générations de listes : explicite, avec * , par boucle, par compréhension⚓︎
On peut créer une liste :
- en donnant explicitement la liste de ses éléments, par exemple
amis = ["Pierre", "Paul", "Alice", "Bob"] -
lorque la liste est composée de le répétition du même élément on peut utiliser
*à la façon de ce qui a été vu sur les chaines de caractères, par exemplezeros = [0] * 10crée une liste contenant 10 zéros. !!! danger -
par ajouts successifs d'éléments à l'aide de
append - par compréhension c'est-à-dire en indiquant à l'aide d'une boucle
forles éléments qui composent la liste (à la façon dont on définit parfois des ensembles en mathématiques). Par exempleentiers = [i for i in range(10)]crée la liste[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
|impairs = [ 2 * i + 1 for i in range(25)] génère la liste [1, 3, 5, ..., 47, 49].
-
Créer la liste
l1des carrés des entiers de 1 à 10 par ajouts successifs (utiliser une bouclefor). -
Créer la liste
l2des carrés des entiers de 1 à 10 par compréhension. -
Créer la liste
l3des entiers impairs de 1 à 99 par ajouts successifs (utiliser une bouclewhile) -
Créer la liste
l4des entiers impairs de 1 à 99 par compréhension -
Créer une liste
l5contenant 10 fois"Python"
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
Exercices de synthèse⚓︎
-
On considère le programme suivant :
Python - Quel est le contenu de chacune des listes ?
- Indiquer par quel procédé chacune de ces listes a été crée.
-
Ecrire un programme python permettant de créer les listes suivantes :
- Une liste contenant 12 fois le chiffre 7.
- La liste des nombres entiers de 1 à 100.
-
Une liste contenant 1000 nombres tirés au sort entre 1 et 6.
Aide
On rappelle que la fonction
randintpeut être importée depuis le modulerandom, elle permet de tirer un nombre en deux valeursaetbdonnées en paramètres. -
La liste des cubes des entiers de 1 à 10.
On suppose qu'on dispose d'une liste de notes, on veut écrire une fonction qui renvoie le nombres de notes qui sont en dessous de la moyenne.
-
On considère une première version de cette fonction :
Python - Recopier et compléter cette fonction
- Tester cette fonction
-
Voici une deuxième version de cette fonction :
Python - Recopier et compléter cette fonction
- Tester cette fonction
-
Quelle est la différence principale entre ces deux versions de la même fonction ?
-
Ecrire les fonctions suivantes :
somme_listequi prend comme argument une liste non vide de nombres et renvoie la somme de ces nombres.moyenne_listequi prend comme argument une liste non vide de nombres et renvoie la moyenne de ces nombres.max_listequi prend comme argument une liste non vide de nombres et renvoie le plus grand de ces nombres.min_listequi prend comme argument une liste non vide de nombres et renvoie le plus petit de ces nombres.
###(Dés-)Active le code après la ligne# Tests(insensible à la casse)
(Ctrl+I)Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)Entrer ou sortir du mode "plein écran"
(Esc)Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier.128013it3a;dv,En2S5éwbcy+14: f-up08)_9eklohxrP=[s6(]/mg7050g0H0c0e0b0J0R0x0r0J0e0R0R0P010c0b0B010406050R0A0W0W0e0N0s040m0K0J0A0?0K0k050V0}0 11130{0B04051j1c1m0V1j0{0g0b0h0+0-0/0;0-0k0X0A0e0X0H0z0B0s0c0L1a0x0L0b0X0L0J1O0L0c0_050$0q0J0H1v0.0:011N1P1R1P0c1X1Z1V0c0N1k1J0+160R0B0e0k0;0l011#1x010y0(0H0k0e0W0H1V1`1|211%241Z27290_0a0x0O0N0K0B0K0R0b190k0x0!1^0N0N0H0r2u1c2c0k1k0V1J2H1;1?1=1W0g2e1y0b0k262r1V1s1u0,1$2R2T0k0K2X1V0B2A1k2F2H2.0|1{2v2Z222%0N100J1V0e1M2A0y0;030F0F0r2(0H1R2$0K0z0D0z0u0_0x0u1c0e2/2=0`2;2d2@1%2_2{2}2 0H3101333537392U3c0z1 040x0l3j3l1|3n2F2Q013s0e2|1k2~0L303234360!3C2%3E0d3g0d3K2E3m0{3O3q0;3R3T053V3X3y3Z3B2S3D3d0v3g0v3,1d3.3o2?1w3r0K2`3S3u3W3w3Y3A3#3~3%3d0n3g0n442.3/2=3P3?4e3`3z3!384k3b3d0S3g0S4q463:493=4b3t3U3v3x4y3}3a3E0Y3g0Y4H3M4s3p4K3Q4M4d4O4f4Q3|4j4T3d0D3g0D4Y2G4!482!4%4c3@3_4g3{4i4A4/0z0G3g0G4@3N4t3;4|4N3^4P4h4z3$4C3e0C0_0u0C594_4u4(4~5g515i4B3E0u3f045A5q475s4}4w504R4.3 3e3G0u3J0V3k3-4Z5F5c4v4*4x4-535M0u3)5C3+5R3L4^5V4$5X5f4+5h4S5$415C435+5T5-4J4{5:4 4,525j5z4n5C4p5|455U5 2^5t5I635x540u4E5C4G6a4r5.606f5Y5J5!653d0u4V5C4X6o4I5b5/6s5;5Z645y6x4;5C4?6C6c6E6r5H6t6h5@4l3e565C586P5~6R6e6T6H6u6J540l5m046/5E6d4a6*625?5L6X0l5B6~6?6(6^5e6`5w6W5k0l3G79714#6S745v5K5#6}5(0l5*5S6b6%7d6)7f5=766|785_0l5{7n6p6@4L6_7g6v6K3F670l697A6D7q734)6+6V7v3E0l6l7V7c4`7r7Q757h6w3F6z0l6B7M6Q7O7D7s6I6i5M0l6M7^7Y5G7;6,7?6}6Z0l6#7-7p7Z7P5u7t7%7H0d6:8c7{5W6G7$7G540d5B8l8f6F7E898j5M0d3G8u8o7e7#7F6-8t5(0d7m5,5a7/5d8z8r8B6X0d5_8O8x7!887=773(670d7L8G5r8g8q8U7T3d0d6l8+8R876g6{7i5k0d6z8@8.7:8K8(8=3(6M0d6O848H868{8T7~8V8*6Z0d838!6q8S8:7u8~406:0v5p6$947|8|988)0z0v5B9v591n2,1c2X2K0g1?2P5c4z2W1t1k2+0H2-3m5}1k4z9O2d0b0g0;342F5z3u9V9X8M5k3f0x2i0H9%7 9)1V5|7C010r5B030x0j0M0H0 0B1Z2w1!1R0R0c1!0g02039c0f260?0H0N0R9Q0{7o9T2v9$019Y2=7U9#9Wao9(ar9+289-au9/ar2H5S9?0k0_a4a69Q0x9f1%0K0_0PaKaM0;0^040Q9QaS010W0b0_5*2:9?aU0iaR9?a!a$5{a(72aT0_a+akaLa-a#049caXa)a@a,a=aZa|5DakaYa*b28Ia.040S6Oa;8Ib9a_aYbc0n9nbg9501bi2.a`b3bc82a b3br3mbtbba|5Qbo3Pbz3MbBbpbc0va:9Pb004a^bsbka|0nbfbObyb1bja{0_0nbN3Mb8bZbSb#040na%bXbhb+bAbT5n69bF5cbH2GbJ3Pblb`b;bpb}3Hb^6;6Bb{4$c5b 5cbvbnc3bGb?bIc78wb7bPbRb@b-0SbEchb|cjb~c70n3icnbYbQbabKbD6#ca4{aU0Uaibx9Uatap1|3(as9.990z3)ax29cU9t5(3KajbFancQ0k3E5_5fc*av40209,c!9j9u9;aEb30I0_0!0ycNbp0p3gd24u0y0_0R0K0 0H0FaI0Hd6cv040Tdh5/aHdlcJ0_0wcE4u0qaH0ba5do22aU0Eds5caO040z020X0c0fdC5/du042S0cdy1%aUdrakc(chc:9Z4mcTaAcV4ncYaz8s6X673,9?d43H0xd=dR0;0R0g0_a9abd|0G0fd~dKdVd6dYaq4Dd#d+5k4Ed)c^7(6ld.b3d_3gd=0x2A0c0K0A0N2T0x0-0xdadca20*0o0J0o290k0c0*a8aad 0Aerdf2we1ad0bafahe3cBcO9%dZ0z6zc/cPc;eXc?ayed7HeY9=ehd`d;d=e1e;eHe26peTame!eW6MeZe)544;ecd$9te}5+ekcddm04ev29dL4{dEaQb!bua|cgck9?9^0_9`2S2t0b3Sdw0e2ua2es2~fbdgeSc)e{e655e8e#56f2e93E6Z3Kf7aYc~040y4bfd2^0_38dQfh8I0Kd:2SfV3rdne_ci04dUe^fDeVfF5ofHaB6x5mfKe#f@aDe/f7f860d9dbfcf!bpdE0tfgb,b3aG04fYcMf,e5cR6x5Be~f3c_5Ae%cZgo7(gqf fP9?fRemep1bg74ug4dcghf;aueW5Pf^cVgLf|f_5Nc{3ngifEgk3ec$2~c:gQ5%grd*f}c$e,8IfRd0d@01d:aLf,5Wd8040W0K0s262TdedwaJg?cb0_dkh2g3040Jg/dTf)3=dNaIha0_dBgDdD0_dGdIe@cqgddN0y0J0Kfvhgf.gHdXgVc,6xc.gZe!g#41gPgNc.g+d3ejd?h622ei04e=d}e?hyb)3OgjhB3ed-hEe 5$d(c@gt7H0ud-hL3PhRf7emeoeqa32~g`g|0ker0!eyeAeCeEeMe?eJa3h0a7eNeDePaghW2G5FhZ5zefh%h,6jebh+fL6xefh:5ch=ekhTd e1ifal0xii6xeYiliq3e4VhI9t6ygSgxgdgFg6gcf#aPhcb40_fk5-gUf=gW0ue}iGf}f1ipi*iNekaYge0k0q0Fgghj4$ffiVi=aH26hwh5cIfWh8hwhif:hzi#h!0ufNi)g#fJi,jei.d?gy0_fT0Ni|fX0JfZiSg8f%gCjsgEj4hPdSdqiAihhA7U6:gniH6/g%h(6}jGf6g1jjiPfag5fBjwhk04gajogfjqjChYjE3d6~gM9tj*iKc_j*gwi/jk04gAeqjZfAiVdE0VjZi=i@j#fCj8gJfF79j+j/1 j.7(k7f dWhX4tiD3FgYiChFcV7ljKim7@g*c|g,c 3wg/g;g/0kg^100Mg a5jUcuh3djkzf+j2jAhxi_60heh0j5j|hldHdJi|dNdPhwf/46i!k5gW7yk8kchHjgknhKkthMg0g/hRixe0hVk3kgeUk)h!7Kk,7Hl2kbl4h/k=h;e.h?0#h^eK1!kC0b0W0~ex0xezeBadeFe1i7esi9i5abeOeQj$khj(3FikkljL78ioe(kq6}isl9iulbiwe?k`lzk c+7UiFlElJ78iJk/j,e+3kiO8IgelhkU04gbhpl*kLkHdpaVg/bciYiBdicLk}igj%j97Ui(lXjIi+lIm6jig222fRjmjZi^jVi`jujZh9jza?kOj7k~e`m2j)jcm5e#82kpjIfNjOjPfQ0_0bd1kPj3mgl:g8d{hnjZl,mmbqjBl iBki8cl38kf{l#c_mWj;jPl)bpl+0e0M0bl-l/fljRmJ5Uk(lU8*gmjdcV8lmye#m~m%mb1%gz0#gBmOm,m.mTjDmscW3GjHn0kam!7(8ugSkfm0lAnd8EmX8Cm gQnrf mD04g.mQkymQkA0_a!0kkEh1kMmnj1l?j3mlnKmRmomKdtdvdxmQdAl-hmkXmH3rkZeDk#lSmrl03(hDmvnvk.m8n0k;l|4$g;i/mQk_lQn abn+mveW8Yns8Nh*n?nvl8n_4{ivd=h@gBa3lgfqlilki0lmi2lplveIeKlueGlwiclynbm1n-8*lDg!m}lHgsiH8+gSaYoe0xk`izoznpoBcWlWoEc#l!o9m}l%k@aFnFfqm/mkhwaWmQl`hwl~mpnolT0Fo4m4oVm#m7oHn0f5l(j=c}jlfUn$3=jpjrnTdDmjp53Ql=mqf-k$m@gIm_cWmuo`nkjfoYc#mAp0mCj?mFmfk2mhfed{jqhom;l;g_o(nXmSo;mUlB9mo65kpNl654pNn2m(n3p6pG0knapz22i{pcgem?iZpjo@fF9vpOc-9*nj7Hp/n2nyj^jvp9f9nGp!k%2:0V9S9z9N9B9K1c0c9Eq92N2I0e1Yq60V9Caj0!0$0(0R04. -
Ecrire une fonction
presentqui prend en argument un elémenteltet une listelisteet qui renvoieTruesieltse trouve dans la listelisteetFalsesinon. Par exemplepresent(3,[1,4,5])renvoieFalse, par contrepresent(4,[1,4,5])renvoieTrue. - Tester cette fonction
- Ecrire une fonction
occurencequi renvoie le nombre de fois oùeltapparaît dansliste. - Ecrire une fonction
indicequi renvoie l'indice de la première apparition d'eltdansliste. On renvoie \(-1\) sieltne se trouve pas dansliste.
On considère une chaine de caractères initialement constituée de \(k\) caractères . suivie d'un caractère # puis de \(k\) caractères #. Par exemple pour \(k=5\) la chaine est .....#..... (5 . suivi d'un # puis de 5 .). Cette chaine évolue de la façon suivante :
- si un
.est entre un#et un., il se transforme en#sinon il reste un. - si un
#est entre deux#ou s'il a un#à sa gauche et un.à sa droite, il se transforme en.sinon il reste un# - le premier et le dernier caractère ayant un seul voisin, ils ne sont pas affectés par ces règles d'évolutions et restent toujours des
.
Par exemple dans le cas \(k=5\) : les étapes successives d'évolution sont :
.....#.....(état initial :)....###....(étape 1)...##..#...(étape 2)..##.####..(étape 3).##..#...#.(étape 4).#.####.##.(étape 5)
Dans le cas \(k=256\), et à l'étape 1000, combien de # contient la chaine ?
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
On donne ci-dessous, une liste d'entiers altitudes (déjà présente dans votre mini IDE), qui correspond aux altitudes d'un coureur lors d'une course de montagne. On veut déterminer le denivelé positif de ce coureur c'est-à-dire la somme des longueurs des ascensions. Par exemple, si la liste altitudes est [330, 490, 380, 610, 780, 550] alors :
- la course commence par une ascension de dénivelé positif \(160\) (\(490-330\))
- puis on a une descente (de \(490\) à \(380\))
- puis une ascension avec un dénivelé positif de \(230\) (\(610-380\))
- puis une nouvelle ascencion de dénivelé positif \(170\) (\(780-610\))
- puis une descente (de \(780\) à \(550\))
Le dénivelé cumulé positif total de cette course est donc \(160+230+170=560\)
Quel est le dénivelé cumulé positif total de la liste des altitudes donnée dans votre IDE ci-dessous ?
Indice
- Pour obtenir la valeur d'un élément dans une liste de Python, on peut utiliser la syntaxe
liste[indice]. Par exemple, sinoel = [25,12,2024]alorsnoel[1] = 12(l'indice du premier élément est 0). - Pour parcourir une liste, on peut utiliser un boucle
fordont la variable représente l'indice de la valeur à laquelle on souhaite accéder. Par exemplefor i in range(3)crée une variable qui prendra successivement les valeurs0,1et2(dans unrangela dernière valeur n'est pas prise), cette variable peut être utilisé dans la boucle pour accéder ànoel[0]puisnoel[1]et enfinnoel[2] - La fonction
lens'applique aussi aux listes et renvoie leur nombre d'éléments.
On considère la liste carres des \(k\) premiers carrés des entiers strictement positifs, par exemple si \(k=6\), carres = [1, 4, 9, 16, 25, 36]. Sur cette liste on effectue les opérations suivantes :
- on enlève les deux derniers éléments
- s'ils ont même parité on calcule leur somme, sinon leur différence (plus grand moins plus petit)
- on rajoute la valeur calculée à l'étape précédente (la somme ou la différence) la fin de la liste
Par exemple pour carres = [1, 4, 9, 16, 25, 36]
- les deux derniers éléments sont
25et36, ils sont enlevés de la liste qui devient[1, 4, 9, 16] - ces deux entiers n'ont pas la même parité, on fait la différence
36 - 25 = 11 - on ajoute cette valeur à la fin de la liste qui devient
[1, 4, 9, 16, 11]On renouvelle ce processus sur la liste obtenue jusqu'à ce qu'elle contienne un unique élément (dans l'exemple ci-dessous on obtient successivement[1, 4, 9, 5]puis[1, 4, 14]puis[1, 18]et enfin[17]).
Quel est l'élément restant dans le cas \(k=100\) ?
Indice
En python append et pop permettent d'effectuer les opérations suivantes sur une liste:
appendajoute l'élément donné en argument à la fin de la liste. Par exemple siliste_de_courses = ["courgettes","poivrons","tomates","oignons"], l'instructionliste_de_courses.append("aubergines")va ajouter en fin deliste_de_coursesl'élément"aubergines". Attention à la syntaxe qui est<liste>.append(<element>).popmodifie une liste en lui enlevant son dernier élément et renvoie ce dernier élément. c'est-à-dire que le résultat d'unpop(l'élément supprimé) peut-être utilisé (pour donner une valeur à une variable par exemple). Par exemple simatieres = ["Informatique","Anglais","Maths","Physique","SVT"], l'instructionsupprime = matieres.pop()a deux effets :- le dernier élément de
matieresest supprimé la liste devientmatieres = ["Informatique","Anglais","Maths","Physique"] - ce dernier élément devient la valeur de
supprime(et doncsupprime = "SVT")
- le dernier élément de
Dans votre IDE ci-dessous, est déjà définie une liste de points du plan, chaque point est représenté par un tuple de python à deux éléments : son abscisse et son ordonnée. Par exemple points = [ (2,-1), (3,5)] contient les points de coordonnées \((2,-1)\) et \((3,5)\). Quelle est la plus courte distance entre deux points de la liste de points définie dans l'éditeur ci-dessous (valeur arrondie au centième) ?
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)