Exercices sur les Listes⚓︎
Exercice 1 : QCM⚓︎
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êmetableau
. 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]
Exercice 2 : Les notes d'Alice - Saison 1⚓︎
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
Solution
2. 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.
# Tests
(insensible à la casse)(Ctrl+I)
Solution
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.
Exercice 3 : Recherche d'indice - non guidé
Il s'agit de déterminer l'indice de la plus petite valeur dans un tableau non-vide.
Exercice 4 : Recherche de valeur - non guidé
La recherche de la valeur maximale dans un tableau. Classique.
Exercice 5 : 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.
Exercice 6 : Comparaison d'éléments consécutifs - non guidé
Le tableau fourni est-il trié ?
Exercice 7 : Modification d'un tableau⚓︎
Cet exercice est à réaliser pour introduire la notion "Affectations et listes" de la section suivante.
On se donne un tableau, une valeur cible et une valeur de remplacement et il faut parcourir le tableau et remplacer la cible par la nouvelle valeur.
Écrire la fonction remplacer
prenant en argument :
- une liste d'entiers
valeurs
- un entier
valeur_cible
- un entier
nouvelle_valeur
Cette fonction doit renvoyer une nouvelle liste contenant les mêmes valeurs que valeurs
, dans le même ordre, sauf valeur_cible
qui a été remplacée par nouvelle_valeur
.
⚠️ La liste passée en paramètre ne doit pas être modifiée.
Exemples
Compléter
# Tests
(insensible à la casse)(Ctrl+I)
ENCRYPTION_TOKEN
Solution & Remarques
🐍 Proposition de correction | |
---|---|
Remarques :
Attention
La difficulté de cet exercice est qu'il faut prendre soin de ne pas modifier la liste initiale.
Testez
Une idée qui vient à l'esprit est la suivante :
def remplacer_naif(valeurs, valeur_cible, nouvelle_valeur):
valeurs_2 = valeurs
for i in range(len(valeurs_2)):
if valeurs_2[i] == valeur_cible:
valeurs_2[i] = nouvelle_valeur
return valeurs_2
valeurs = [3, 8, 7]
assert remplacer_naif(valeurs, 3, 0) == [0, 8, 7]
assert valeurs == [3, 8, 7]
Recopiez ce script ci-dessus puis testez-le.
🌵 🌵 🌵
👉 Cela ne répond pas au problème, en effet tout se passe comme si l’instruction valeurs_2 = valeurs
donnait deux noms différents au
même objet. valeurs_2
n’est pas une nouvelle liste.
La solution proposée en correction
On crée donc une autre liste qui doit être un autre objet, qui sera celle renvoyée par la fonction.
La solution proposée crée une liste vide que l'on complète au fur et à mesure en parcourant les valeurs de valeurs
.
Autre solution possible
ENCRYPTION_TOKEN
Exercice 8 : Les notes d'Alice - Saison 2⚓︎
Les notes d'Alice - Saison 2
⏳ La correction viendra bientôt ..
Exercice 9 : 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.
Exercice 10 : 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éthodemax
.
Exemples
Compléter ci-dessous
# Tests
(insensible à la casse)(Ctrl+I)
ENCRYPTION_TOKEN
Solution & Remarques
🐍 Proposition de correction | |
---|---|
Remarques :
La solution proposée ci-dessus est la version recommandée.
Version (moins élégante) sans compréhension de liste :
ENCRYPTION_TOKEN
Exercice 11⚓︎
Exercice 11
Résolvez le Pydéfi proposé à cette adresse
Vous pouvez vous créer un compte pour valider vos résultats, ce site (géré par l'Académie de Poitiers) est remarquable.
Exercice 12⚓︎
Exercice 12
On donne la liste jours
suivante :
On rappelle que la fonction len
permet d'obtenir le nombre de caractères d'une chaine de caractères :
Q1. Créer en compréhension une liste lst1
contenant uniquement les jours comportant 5 lettres.
Q2. Créer en compréhension une liste lst2
contenant uniquement les jours comportant la lettre a
dans leur nom.
Q3a. Créer une fonction compte_e
qui prend en paramètre une chaine de caractères et qui renvoie le nombre de e
que contient cette chaine de caractères.
Correction
Q3b. Créer en compréhension une liste lst4
contenant uniquement les jours comportant deux fois la lettre e
dans leur nom.
Exercice 13⚓︎
Exercice 13
On donne le tableau m
suivant :
- si le nombre est divisible par 7, afficher
*
, sinon afficher une espace - sur une même ligne, on affichera tous les symboles côte à côte, en rajoutant le paramètre
end = ''
à la fonctionprint
. (exemple :print('*', end = '')
) - on ira à la ligne à la fin de chaque ligne, par l'instruction
print()
Exercice 14⚓︎
Exercice 14
Pydéfi Insaisissable matrice (version originale à cette adresse)
On considère la matrice suivante :
-------------------------------
| 17 | 3 | 4 | 14 | 5 | 17 |
-------------------------------
| 8 | 16 | 3 | 17 | 14 | 12 |
-------------------------------
| 13 | 5 | 15 | 4 | 16 | 3 |
-------------------------------
| 14 | 7 | 3 | 16 | 3 | 2 |
-------------------------------
| 6 | 1 | 16 | 10 | 5 | 13 |
-------------------------------
| 11 | 1 | 9 | 11 | 18 | 8 |
-------------------------------
M = [[17, 3, 4, 14, 5, 17], [8, 16, 3, 17, 14, 12], [13, 5, 15, 4, 16, 3], [14, 7, 3, 16, 3, 2], [6, 1, 16, 10, 5, 13], [11, 1, 9, 11, 18, 8]]
Cette matrice va évoluer au cours du temps, et le contenu k
d'une case est transformé, à chaque étape en (9*k + 3) % 19
.
Rappelons que a % b
donne le reste de la division entière de a
par b
.
À chaque étape de calcul, tous les nombres de la matrice sont simultanément modifiés. L'entrée du problème est le nombre d'étapes à appliquer (ici : 39). Vous devez répondre en donnant la somme des valeurs contenues dans la matrice après application de toutes les étapes.
Exercice 15⚓︎
Exercice 15
D'après Advent Of Code 2021, day02
Un sous-marin peut se déplacer horizontalement (toujours vers la droite) grâce à l'instruction forward
suivie d'un nombre.
Il peut aussi monter ou descendre, grâce aux instructions up
ou down
, elles aussi suivies d'un nombre.
Un grand nombre d'instructions successives sont données. Le but de l'exercice est de trouver le produit final de l'abscisse du sous-marin et de sa profondeur.
Exemple :
Après ces déplacements, le sous-marin se trouve à l'abscisse 15 et à la profondeur 10. La réponse à l'énigme serait donc 150.
-
Téléchargez le fichier input.txt. Votre fichier
.py
de travail doit se situer dans le même répertoire que le fichierinput.txt
.
Parsing des données
Parser des données consiste à les récupérer et les rendre exploitables. C'est quelque chose de souvent pénible (dans les énigmes de code ET dans la vraie vie). Pourtant de la qualité du parsing (et surtout de la structure de stockage choisie) va dépendre la difficulté (ou non) de l'exploitation des données.
Proposition de parsing :
Python | |
---|---|
Exécutez ce code et observez ce que contient la liste lst
.
Résolution de l'énigme
À la fin de toutes ses manœuvres, quel est le produit de l'abscisse du sous-marin et de sa profondeur ?
data_raw = open('input.txt').read().splitlines()
lst_raw = [d.split(' ') for d in data_raw]
lst = [[l[0], int(l[1])] for l in lst_raw]
x = 0
y = 0
for couple in lst:
direction = couple[0]
valeur = couple[1]
if direction == 'forward':
x += valeur
if direction == 'down':
y += valeur
if direction == 'up':
y -= valeur
print(x*y)
La réponse est donc 1746616.
# Tests
(insensible à la casse)(Ctrl+I)