Aller au contenu

Exercices sur les tableaux

QCM 1⚓︎

Parcours sur les indices ou sur les valeurs ?

On considère un tableau non vide contenant des valeurs quelconques. Indiquer dans chaque cas le bon type de parcours à effectuer.

  • On souhaite déterminer l'indice de la valeur maximale.

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ✅ Parcours sur les indices
    • ❌ Parcours sur les valeurs
  • On souhaite calculer la somme des valeurs.

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ❌ Parcours sur les indices
    • ✅ Parcours sur les valeurs
  • On souhaite créer un nouveau tableau ne contenant que les valeurs de la première moitié de tableau.

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ✅ Parcours sur les indices
    • ❌ Parcours sur les valeurs
  • On souhaite déterminer les deux extrema (minimum et maximum).

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ❌ Parcours sur les indices
    • ✅ Parcours sur les valeurs
  • On souhaite élever au carré toutes les valeurs du tableau en écrivant les nouvelles valeurs dans le même tableau. Par exemple [2, 3, 4] deviendrait [4, 9, 16].

    • Parcours sur les indices
    • Parcours sur les valeurs
    • ✅ Parcours sur les indices
    • ✅ Parcours sur les valeurs avec une liste en compréhension : tableau = [x * x for x in tableau]

Les notes d'Alice - Saison 1⚓︎

bulletin

1. Alice veut créer la liste des notes qu’elle a obtenues ce trimestre en NSI.
Ces notes ne sont pas forcément des nombres entiers.
Ecrire une fonction qui demande de saisir les notes une par une, et qui renvoie liste_notes, la liste des notes qu’elle a obtenues.

Astuce 1

Vous pouvez prendre en paramètre de la fonction le nombre de notes à saisir.

Astuce 2

vous pouvez initialiser liste_notes = [], puis ajouter dans la liste les notes une par une avec une boucle.

Compléter le code

###(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

Solution
🐍 Script Python
def creation_liste(n):
    """
    n est un entier donnant la taille de la liste à saisir
    La fonction renvoie la liste saisie
    """
    liste_notes = []
    for i in range(n):
        note = float(input("saisir votre note : "))
        liste_notes.append(note)
    return liste_notes

2. Créer le programme qui demande la saisie du nombre de notes, crée la liste des notes, affiche la plus petite note, et la plus haute.
💡 Indication : tester les fonctions min et max.

Vous pourrez utiliser la fonction écrite en question 1 (si vous l'avez bien exécutée), sans l'écrire à nouveau.

Ecrire le code ci-dessous

###(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

Solution
🐍 Script Python
n = int(input("nombre de notes à saisir : "))
notes = creation_liste(n) # de type liste
note_mini = min(notes)
note_maxi = max(notes)
print("note minimale :  ", note_mini)
print("note maximale :  ", note_maxi)

3. Créer une fonction moyenne qui prend en paramètre une liste lst et renvoie la moyenne des éléments de cette liste.

Compléter le code

Compléter le script pour qu’il affiche la moyenne des notes saisies par Alice. La fonction creation_liste est dans du code caché, il ne faut pas l'écrire.

###(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

Solution
🐍 Script Python
def moyenne(lst):
    """
    Cette fonction renvoie la moyenne de la liste lst
    """
    somme = 0  #initialisation de la somme des notes
    for note in lst:  # calcul de la somme des notes avec une boucle
        somme = somme + note
    moyenne = somme/len(lst)  # len(liste) est le nombre de notes
    return moyenne

n = int(input("nombre de notes à saisir : "))
notes = creation_liste(n)
print(notes)  
moyenne_notes = moyenne(notes)
print(moyenne_notes)

Exercices du site "CodEx"⚓︎

Remarque

Ne faire que les exercices dont les liens sont donnés ici, car certains se trouvant sur le menu de gauche nécessitent des connaissances que nous n'avons pas encore vues.

Recherche d'indice - non guidé

Il s'agit de déterminer l'indice de la plus petite valeur dans un tableau non-vide.

Indice du minimum d'un tableau

Recherche de valeur - non guidé

La recherche de la valeur maximale dans un tableau. Classique.

Maximum

Lecture dans un tableau - non guidé

On donne les altitudes des différentes étapes d'une course en montagne. On demande quel est le dénivelé positif total.

Dénivelé positif

Comparaison d'éléments consécutifs - non guidé

Le tableau fourni est-il trié ?

Est trié ?

Les notes d'Alice - Saison 2⚓︎

bulletin

Les notes d'Alice - Saison 2

1. Alice veut créer la liste des notes qu’elle a obtenues ce trimestre en NSI.
Ces notes ne sont pas forcément des nombres entiers, et il y a des coefficients qui peuvent être différents pour chaque note.
Ecrire une fonction creation_liste_tuples qui prend en paramètres n le nombre de notes, demande de saisir les notes une par une, avec le coefficient associé à chaque note, et qui renvoie liste_notes, la liste des tuples (note, coefficient) .
Nous avons étudié les assertions. Dans cette fonction il doit y avoir une assertion qui vérifie que chaque note saisie est un réel entre 0 et 20 (compris), et une assertion qui vérifie que chaque coefficient saisi est un réel positif.

###(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

Solution
def creation_liste_tuples(n):
    """
    n est un entier donnant la taille de la liste à saisir
    La fonction renvoie la liste des tuples (note, coefficient) .
    """
    liste_tuples = []
    for i in range(n):
        note = float(input("Saisir votre note : "))
        coef = float(input("Saisir le coefficient correspondant : "))
        assert note >= 0 and note <= 20, "la note est entre 0 et 20."
        assert coef >= 0, "le coefficient est positif"
        liste_tuples.append((note, coef))
    return liste_tuples

2. Ecrire un code qui demande la saisie des notes et coefficients, puis affiche la plus petite note, et la plus haute.

La fonction creation_liste_tuples n'est pas à écrire, vous pouvez l'utiliser, elle est en code caché.

💡 Indication : Vous pourrez utiliser les fonctions min et max.

###(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

Solution
n = int(input("nombre de notes à saisir : "))
liste_tuples_notes = creation_liste_tuples(n) # de type liste
liste_notes = [elem[0] for elem in liste_tuples_notes]
note_mini = min(liste_notes)
note_maxi = max(liste_notes)
print("note minimale :  ", note_mini)
print("note maximale :  ", note_maxi)

3. Créer une fonction moyenne qui prend en paramètre lst_notes une liste de tuples (note, coefficient) et qui renvoie la moyenne arrondie à deux chiffres après la virgule, des notes de lst_notes.

Aide pour les arrondis

Exécuter ci-dessous :

###(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

###(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
Évaluations restantes : 5/5

.128013dcnw3)q=g8, t:eP4(y+p-S6kviL512hl7*/mrs_b0;oa9uf050b0p0n0T0B0H0N0m0c0H0T0N0N0i010n0B0v010406050N0V0L0L0T0M0t040x0S0H0V0;0S0d050K0{0}0 110_0v04051h1a1k0K1h0_0b0B0A0)0+0-0/0+0d0j0V0T0j0p0w0v0t0n0G180m0G0B0j0G0H1M0G0n0@050!0P0H0p1t0,0.011L1N1P1N0n1V1X1T0n0M1i1H0)140N0v0T0d0/0F011Z1v010W0$0p0d0T0L0p1T1^1`1 1#221X25270@0a0m0q0M0S0v0S0N0B170d0m0Y1?0M0M0p0c2s1a2a0d1i0K1H2F1/1;1:1U0b2c1w0B0d242p1T1q1s0*1!2P2R0d0S2V1T0v2y1i2D2F2,0`1_2t2X202#0M0~0H1T0T1K2y0W0/030O0O0c2$0p1P2!0S0w0D0w0E0@0m0E1a0T2-2:0^2/2b2=1#2@2_2{2}0p2 01313335372S3a0w1}040m0F3h3j1`3l2D2O013q0T2`1i2|0G2~3032340Y3A2#3C0f3e0f3I2C3k0_3M3o0/3P3R053T3V3w3X3z2Q3B3b0r3e0r3*1b3,3m2;1u3p0S2^3Q3s3U3u3W3y3Z3|3#3b0D3e0D422,3-2:3N3;4c3^3x3Y364i393b0y3e0y4o443.473:493r3S3t3v4w3{383C0I3e0I4F3K4q3n4I3O4K4b4M4d4O3`4h4R3b0k3e0k4W2E4Y462Y4#4a3=3@4e3_4g4y4-0w0U3e0U4=3L4r3/4`4L3?4N4f4x3!4A3c0Q0@0E0Q574@4s4$4|5e4 5g4z3C0E3d045y5o455q4{4u4~4P4,3}3c3E0E3H0K3i3+3K1l2*1a2V2I0b1;2N5a4x2U1r1i2)0p2+3k5R2E054x5,2b0B0b0/322D5x3s5@5_505h5|0m2g0p5 5v525z3*4H4_0z0@0Y0W5.5=4^200e3e6h5D5a0d0W0@0L0S0t242R6n6b200?040s6y594!0d0@0%0n0O2#0n0p0N6E4Z4_6B0g0o6h0_435S3M5~015`2:3C3E5d6#4+515K1}6326656$605w3b6*5P6i3N6l3F0m716Q6j1#0N0b0@020h0V0S0n0R797b7d7f7c0R6W730m6,0O5{3b3%4M7o675K3%6;27664Q7w1T6|6o4!763e710m6J6L7c6O0m6O0n0m0V2R7K0B0N6N2u1Y0n0V0v1X0(0s6M0p0l1?3u220c0B240n0g7l6Y5/6!5^6@7q0w3 7t7}6-613~1~647A5J4j807D5Q6z757770710C2|0W182A0B1J2y0d0A0S7=7K2|6t6v0d7U0Y0(7+0(240m6N250d7R340L0v7Y8C7.0W7:7=8K6P7`3l8X5D7o7 4l82896.8b4l7y6?846_3a8d6}5a7H8i0m7i7h7a7j8{7k8X6X2.7|5 7 4C8(6@7v8b4C8-8)850w973I7J0m7F4_6H040N0S0}0p7M6N8W2,9k8f0/0S0@0i6h9x6F4_0L0B0@5n917m8#6(3b4T988/524T9d997B8b9Q9i7J9l2?0@9p9r3y3u9v3k9E6R209A049C8X9/740/9H9J7_934r9N1`3C4/9R6^524/9V9S5Ka49!729y016d048m0M9D9$1#6B6D8Zaf9n7+7m5a6B0lalar0@343uau4!6Tay9F9;6 2QaG9:3p6I7X9t6OaD6S0@6V9Laqa0837p9O535}aZ9a5i54a9a65K542F3i9j9jam3:9(9q27aQ9-3K9_3N9=9@9wa@3Oa_9*8EaL9`019=0ub94s0@ataXaM9z0@0JaS9%04aB6g9^925-947~a#5ma%9e8:bya,a)5x5ka:8_a?az9oa`9sbqa}2Ea 5ab1be6pb6a{bObU4!bcbZ9maA0SaCbs9MaZ7 5ybz9W8a5ib/bD9Xb?696|bJaHaN042y0{0H0!0nb$9;9Bc63p0P0@2m7T0bbnan0@ap9 bjb5bLb77NbP8?b!0@0Kcga^cnbXb)0Wcqb4awc99{9I045OckbaaFaWcJ7nb-bx6*2|7ub_5x6:88b;8*b?6{a;9#afah2y7#0M199^b49nc10Vc30Tc5cM5-0K5;5T5+5V5(1a0n5Yd12L2G0T1Wc~0K5W6X0Y0!0$0N04.

4. Ecrire ci-dessous un seul script structuré qui rassemble toutes les questions :

  • Saisie de la liste des tuples
  • Affichage de la note minimale et de la note maximale
  • Affichage de la moyenne arrondie à deux chiffres après la virgule.

Les fonctions creation_liste_tuples et moyennene sont pas à écrire, vous pouvez les utiliser, elles sont en code caché.

###(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

Solution
n = int(input("nombre de notes à saisir : "))
liste_tuples_notes = creation_liste_tuples(n) # de type liste
liste_notes = [elem[0] for elem in liste_tuples_notes]
note_mini = min(liste_notes)
note_maxi = max(liste_notes)
print("note minimale :  ", note_mini)
print("note maximale :  ", note_maxi)
resultat_moyenne = moyenne(liste_tuples_notes)
print("La moyenne est : ", resultat_moyenne)

Soleil couchant⚓︎

Recherche de maxima relatifs - non guidé

Combien de bâtiments sont éclairés par le soleil couchant. Le sujet est original mais l'algorithme très classique.

Soleil couchant

Recherche d'indices⚓︎

Auteur : Sébastien HOARAU

Ecrire une fonction qui renvoie la liste croissante des indices d'un certain élément dans un tableau.

Il est recommandé d'utiliser une liste en compréhension.

Écrire une fonction indices qui prend en paramètres un entier element et un tableau entiers d'entiers. Cette fonction renvoie la liste croissante des indices de element dans le tableau entiers.

Cette liste sera donc vide [] si element n'apparait pas dans entiers.

On n'utilisera ni la méthode index, ni la méthode max.

Exemples
🐍 Console Python
>>> indices(3, [3, 2, 1, 3, 2, 1])
[0, 3]
>>> indices(4, [1, 2, 3])
[]
>>> indices(10, [2, 10, 3, 10, 4, 10, 5])
[1, 3, 5]
Compléter ci-dessous

###(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
Évaluations restantes : 5/5

.128013dcnw)3q=g8, t:eP(]y4p-SkLvi65R21hél/mr[s._;bVoa9uf050b0p0n0V0B0J0O0m0c0J0V0O0O0i010n0B0v010406050O0X0L0L0V0M0t040x0U0J0X0?0U0d0m020V0L0v0R0m0E0p100M0h0X0p0O050K0}0 11130{0v04051y1r1B0K1y0{0b0B0A0+0-0/0;0-0d0j0X0V0j0p0w0v0t0n0H1a0m0H0B0j0H0J1%0H0n0_050$0S0J0p1K0.0:011$1(1*1(0n1:1=1.0n0M1z1Y0+160O0v0V0d0;0F011@1M010Y0(0p0d1e0p1.292b2g1_2j1=2m0L2o040a0m0q0M0U0v0U0O0B191b0!270M0M0p0c2J1r2q0d1z0K1Y2V2325241/0b2s1N0B0d2l2G1.1H1J0,1^2)2+0d0U2/1.0v2O1z2T2V2 0|2a1b2;2h2^0M100J1.0V1#2O0Y0;030Q0Q0c2_0p1*2@0U0w0k0w0G0_0G1r0V30330`322r351_37393b3d0p3f013h3j3l3n2,3q0w2e040F3w3y2b2V2|0p2V2/2Y0b252%3D0;3k0!2.1I1z3!2~3z2S3^3.3#3B1b0B0b0;3i2T3R3t1z3c3 413N0!3P2^442f2w0p493{4c3p3r453W3}2(010y0_0!0Y3_3Y4p3,010e0_0m4w2U4y1L3E0Y0_2*1H0c1p4E3@3C4H0;0^040r4P4G2=010d0_3m1k2l0n4X2T4q4U0l4P4D4,4z4#044)0B0p0M1q1s3^4=4S014U0f0o4P0{4~4x4,480142333R3T0547405c4a3m2*3Q3r2e0m4g4i3O5n4d5p1.0K3x0m5B4;334q4s042O0n0X0M0d4:4Y2h4U0N4+5E4?4K5N504Z5G0Y0U0M5W5T514@0B5%4R4Z0U4B042*5,345)0S0_0M2b1T5S5-5P0_4W584F5X365_042v5~5@4Z4U6231653E4$0d0?4{4}6f5(6c0_0f0f5?5F4K4v63045D5 6h4^6j4`4|6a4-0_5R6x5O6B5+6K6g4T0_0s6t4z0U0_0i0i6T5)4$1=2x6j6G4z4U6S6x57310K3{3Z2}1r3%1r0n3)6_2#2W0V1;3|0K3%1x4Q6b2h2O0L0Q0Y0V0y0p0Q0H0g0_1j1l1n1p0m556K1E3A1y0z3c0O16180B1!2|2E2G0I1?0c0B0w0!0/0X0*1p0n0m0-0m0A6l7y1b2O3k1u0d0b7D0P1C7r040T7S1!0r0L0U2*0*0I0J0I0j2b0n0p0f0m0O2b0*7W2|0I0H2l2H1!2L1*0O7_7n7$1G1I4q1O1Q1S1U1W1Y1!1{1)1+1-754q2u2l2n0_2A0x0c0M0@7N0q1X1Z5M6K3?3}3X4F6;4p5b5d2b0w0W3s3H8O5l4k8R8T5r2n5t4b5v3p8S3t3I3K3M4j8(8Y4n5z8r4z5G4u6)515:4D6O6o364J5;7Y0B4N6m4 901_6d8{4Z4@4%6%4*8 6A6Q044/6x6z766B4_6l9c600454566G8V438S5g5i8$5m3o8Y5q5s5k8/9G9B2f0H3e3g3i9L3Q9N2V5A5C6L0;4@2F2H2J973Y9o4q6V046Y9n9Z526I6,2 6.982r9z5e8S7h460m8V9T4d9~4f8#9K5u9M0w7h8,9R8W8:a59W6y9Y6P4r0_5!5$9:al5*6Z5.5:5=aq999!675{1P0p9t9a61aEaz0_699i9p9k6e9`aM4!6i6k6FaL6H9v9w6-9y5j8P0d8Y0u8Ua#afaaa)8!2x9E8X8Sa.9P3Jaea38)0wa)ai5Cb09+8^6vat36aS6E9)64ay9=046J6n9jaR5;aHbc9@3zb2519-6Xb59q6$4)bj4U7o9^a!499A0w0Da*a;agbCa6a:a88%aabDad3L9Sa99UbHa b1bV9;9#2G2I7Tb98@bo0_7#aV5U040V0v0v2l0bbvaGb+6!bib^6p9v9xaV9|8Q8S0CbEbK9FbSc3a/4hc5a=0wc8a^8-bQbLc75y9X5B9;5G5I5K8G2 bn9d0_9$b!1ab$9_4x6:3l6=71736@0#0%0)04.

Parcours par indice ou par élément⚓︎

Parcours par indice ou par élément : remise à zéro

Cet exercice est un exercice "papier" à ne réaliser que par écrit.

1. Que vaut ma_liste si on exécute le code suivant ?

ma_liste = [1, 2, 3]
for element in ma_liste:
    element = 0
Solution

On a toujours ma_liste = [1, 2, 3]

2. Expliquer le résultat du 1.

Solution

On a le déroulé suivant :

ma_liste = [1, 2, 3]
element = 1
element = 0
element = 2
element = 0
element = 3
element = 0
On voit que ma_liste n'a pas été modifié.

3. Que vaut ma_liste si on exécute le code suivant ?

ma_liste = [1, 2, 3]
for i in range(3):
    ma_liste[i] = 0
Solution

On a après exécution ma_liste = [0, 0, 0]

4. Expliquer le résultat du 3.

Solution

On a le déroulé suivant :

ma_liste = [1, 2, 3]
i = 0
ma_liste[0] = 0
i = 1
ma_liste[1] = 0
i = 2
ma_liste[2] = 0
On voit que ma_liste a été modifié, et après exécution ma_liste = [0, 0, 0]

Auteurs des exercices: Nicolas Revéret, Jean-Louis Thirot, Sébastien Hoareau et Mireille Coilhac