25 - Exos Tableaux 1
Attention, le soin est noté et les codes markdown identiques seront sanctionnés à moins de noter clairement que vous avez travaillé avec un autre élève de la classe.
1 - Lecture
Rappel
Pour parvenir à accéder aux valeurs contenues dans un tableau, il existe deux méthodes.
Possibilité n°1 : utilisation d'un FOR sur les index du tableau
1
2
3
4 | notes = [15, 18, 8, 10, 12, 15, 20, 5, 12, 17, 12, 10, 18, 4]
for index in range( len(notes) ):
print(notes[index], end="-")
|
La variable de boucle index va alors prendre successivement les valeurs 0, 1, 2...
On obtient alors ceci
15-18-8-10-12-15-20-5-12-17-12-10-18-4-
Possibilité n°2 : utilisation d'un FOR sur la variable du tableau elle-même : accès directe aux valeurs en lecture seule.
1
2
3
4 | notes = [15, 18, 8, 10, 12, 15, 20, 5, 12, 17, 12, 10, 18, 4]
for element in notes :
print(element, end="-")
|
La variable de boucle element va alors prendre successivement les valeurs 15, 18, 8...
On obtient alors ceci
15-18-8-10-12-15-20-5-12-17-12-10-18-4-
01° Que va contenir la variable a lors des tours de boucle successifs ? S'il ne s'agit pas de la valeur contenue dans la case, que faudrait-il noter pour obtenir ce contenu ?
1
2
3
4 | notes = [15, 18, 8, 10, 12, 15, 20, 5, 12, 17, 12, 10, 18, 4]
for a in notes :
print(a, end="-")
|
02° Que va contenir la variable a lors des tours de boucle successifs ? S'il ne s'agit pas de la valeur contenue dans la case, que faudrait-il noter pour obtenir ce contenu ?
1
2
3
4 | notes = [15, 18, 8, 10, 12, 15, 20, 5, 12, 17, 12, 10, 18, 4]
for a in range( len(notes) ):
print(a,end="-")
|
2 - Modification
Rappel
Pour modifier les cases d'un tableau, nous n'avons pas le choix : il faut passer par la méthode de l'index : il faut utiliser l'adresse du tableau (contenue dans la variable du tableau) et aller modifier la valeur placée sur un index précis.
Exemple valide : modification d'un tableau
Voici une fonction qui modifie tout le contenu du tableau qu'on reçoit en paramètre : on y place le string "Bonjour" dans toutes les cases.
1
2
3
4 |
|
Remarquez bien l'absence de return : on modifie le tableau, on n'en crée pas un nouveau qu'on renvoie.
Pour l'utiliser :
>>> base = [10, 20, 30]
>>> remplacer(base)
>>> base
['bonjour', 'bonjour', 'bonjour']
Exemple valide 2 : Renvoi d'un tableau basé sur le premier.
On crée et renvoie un tableau qui a le même nombre de cases mais qui ne contient que "Bonjour".
1
2
3
4
5
6 |
|
On notera cette fois la présence d'un return : il faut donc placer cette réponse dans une variable qui contiendra alors un nouveau tableau.
Utilisation :
>>> base = [10, 20, 30]
>>> resultat = creer(base)
>>> base
[10, 20, 30]
>>> resultat
['Bonjour', 'Bonjour', 'Bonjour']
Exemple valide 3 : Renvoi d'un tableau basé sur le premier.
Comme au dessus : on crée et renvoie un tableau qui a le même nombre de cases mais qui ne contient que "Bonjour". On utilise juste directement la création par compréhension.
1
2
3
4 |
|
Toujours un return : on crée bien un nouveau tableau.
Utilisation :
>>> base = [10, 20, 30]
>>> resultat = creer2(base)
>>> base
[10, 20, 30]
>>> resultat
['Bonjour', 'Bonjour', 'Bonjour']
03° On veut créer une fonction qui modifie par effet de bord un tableau en rajoutant 10 à toutes les valeurs dont l'index est strictement supérieur à 3. On ne veut donc pas renvoyer le tableau ou une copie du tableau. On veut le modifier sur place.
Voici quelques propositions fournies par des élèves.
Pour chacune d'elle, dire si c'est bon (en le justifiant un peu), si c'est faux (en expliquant ce qui est faux).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 |
|
3 - Fonction et tableau
04° Créer une fonction qui attend un tableau de notes en paramètres. Elle renvoie True
si toutes les notes sont valides. Sinon, False
05° Créer une fonction qui attend un tableau de notes en paramètres. Elle renvoie une copie du tableau en remplaçant les notes par 0 si moins que 10 et 20 si 10 ou +. On ne modifie pas le tableau initial : on en crée un nouveau.
06° Un élève propose cette version erronée d'une fonction qui doit renvoyer un tableau d'entiers crée à partir d'un tableau de strings. "10" doit devenir 10... La présence d'un "A" implique une note de 0.
Son test lui montre que son programme n'agit que sur le premier élément.
>>> ds
['20', '15', '5', 'A', '2', '12', '18']
>>> notes = str_en_int(ds)
>>> notes
[20, '15', '5', 'A', '2', '12', '18']
Seule la première note est bien un integer...
Il y a une erreur d'inattention qui provoque ce fonctionnement douteux. Trouver l'erreur. Modifier le programme.
1
2
3
4
5
6
7
8
9
10 |
|
07° Un autre élève propose cette version correcte. Expliquer le plus clairement possible comment cela fonctionne.
1
2
3
4
5
6
7
8
9
10 |
|
>>> ds
['20', '15', '5', 'A', '2', '12', '18']
>>> notes = str_en_int(ds)
>>> notes
[20, 15, 5, 0, 2, 12, 18]
08° Voici deux versions d'une fonction qui renvoie un tableau dont le contenu est, pour chaque case, le double du tableau d'entrée.
1
2
3
4
5
6
7
8
9 |
|
Réaliser la documentation à rajouter sur ces fonctions :
- Petite phrase explicative
- Description du paramètre (dont le type)
- Description de la réponse éventuelle (dont le type)
- Un exemple qui pourra être utilisé par le module doctest si on l'active, et qui ne sert que de documentation sinon.
09° Voici une fonction courte sur laquelle les spécifications sont indiquées directement sur la première ligne, version ultracourte de documentation.
Quelle est la forme de documentation des spécifications en typing correcte ? Justifiez les cas jugés faux.
1
2
3
4
5
6
7
8
9
10
11 |
|
10° Voici une fonction qui crée un nouveau tableau à partir du tableau d'entrée. Il place à l'index 1 la somme de l'index 0 et 1 de l'ancien. Il place à l'index 2 la somme de l'index 0, 1 et 2 de l'ancien...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 |
|
Rajouter
- une assertion pour imposer la précondition : entree est un tableau (de type list en Python) et
- une assertion pour imposer la postcondition : reponse est un tableau
Expliquer ensuite ce qui provoque cette erreur si on envoie pas un tableau d'entiers :
- A : la fonction testmod du module doctest
- B : vos assertions
- C : une des instructions du code de la fonction
- D : la documentation présente dans la fonction
Activité publiée le 15 09 2020
Dernière modification : 15 09 2020
Auteur : ows. h.