Vrai/Faux : Listes en Python

[enonce]
Pour chaque affirmation suivante, indiquez si elle est Vraie ou Fausse.
[/enonce]

[etape]
On exécute le programme Python ci-dessous :

l = [7, 9, 11, 13]
print(l[1])

Affirmation : Ce programme affiche $7$ comme résultat.

[qcm]
[option]Vrai[/option]
[option correct="true"]Faux[/option]
[reponse statut="correct"]Correct !
Le programme affiche 9.
En Python, les indices commencent à $0$ : 7 correspond à l[0], et 9 correspond à l[1].[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est fausse.
Attention : en Python, les indices ne commencent pas à $1$ comme en mathématiques, mais à $0$. Ainsi l[0] désigne le premier élément et l[1] le deuxième.
Recompte la position demandée pour identifier l'élément effectivement affiché.[/reponse]
[/qcm]

[solution]
Cette affirmation est fausse. En Python, les indices commencent à $0$, donc l[1] renvoie le deuxième élément : $9$.
[/solution]
[/etape]

[etape]
On exécute le programme Python ci-dessous :

a = [1, 2, 3]
b = [4, 5, 6]
print(a + b)

Affirmation : Ce programme affiche [5, 7, 9].

[qcm]
[option]Vrai[/option]
[option correct="true"]Faux[/option]
[reponse statut="correct"]Correct !
L'opérateur + sur deux listes réalise une concaténation (mise bout à bout), pas une addition terme à terme.
Le programme affiche : [1, 2, 3, 4, 5, 6].[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est fausse.
Le piège ici est de traiter + comme une addition mathématique terme à terme. Sur deux listes, + réalise une concaténation : il met les listes bout à bout.
Reprends les deux listes dans cet ordre pour reconstituer le résultat.[/reponse]
[/qcm]

[solution]
Cette affirmation est fausse. L'opérateur + sur des listes Python réalise une concaténation : le résultat est [1, 2, 3, 4, 5, 6].
[/solution]
[/etape]

[etape]
On définit la fonction Python ci-dessous :

def carres(n):
    return [i**2 for i in range(n)]

Affirmation : L'instruction carres(3) retourne la liste [0, 1, 4, 9].

[qcm]
[option]Vrai[/option]
[option correct="true"]Faux[/option]
[reponse statut="correct"]Correct !
range(3) génère les entiers de $0$ à $2$ (soit $0$, $1$, $2$).
L'instruction carres(3) retourne donc [0, 1, 4] et non [0, 1, 4, 9].[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est fausse.
Rappel : range(n) s'arrête à $n-1$ et n'inclut pas $n$. Il ne génère donc pas autant de valeurs qu'on pourrait le croire.
Liste les entiers réellement produits par range(3), puis élève chacun au carré pour retrouver la bonne liste.[/reponse]
[/qcm]

[solution]
Cette affirmation est fausse. range(3) génère $\{0, 1, 2\}$, donc carres(3) = [0, 1, 4] (trois éléments, pas quatre).
[/solution]
[/etape]

[etape]
On exécute le programme Python ci-dessous :

maListe = ["a", "b", "c", "d"]
print(len(maListe))

Affirmation : Ce programme affiche $4$ comme résultat.

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]Correct !
len(maListe) renvoie le nombre d'éléments de la liste, soit $4$.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
Ne confonds pas len, qui donne le nombre d'éléments, avec l'indice du dernier élément (toujours plus petit d'une unité).
Recompte simplement les éléments de la liste pour t'en convaincre.[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. len(maListe) renvoie le nombre d'éléments de la liste : il y en a $4$.
[/solution]
[/etape]

[etape]
On considère la fonction Python ci-dessous :

def f(liste):
    max = 0
    for a in liste:
        if a > max:
            max = a
    return max

Affirmation : L'instruction print(f([5, 8, 10, 3])) affiche le nombre $10$.

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]Correct !
La fonction f parcourt la liste et retourne son plus grand élément.
Le maximum de $[5, 8, 10, 3]$ est bien $10$.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
Suis l'exécution pas à pas : la variable max part de $0$ et n'est mise à jour que lorsqu'un élément plus grand est rencontré.
Déroule la boucle sur les valeurs de la liste pour voir quelle valeur finale est retournée.[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. La fonction cherche le maximum en comparant chaque élément à la valeur courante. Le maximum de $[5, 8, 10, 3]$ est $10$.
[/solution]
[/etape]

[etape]
On considère le programme Python suivant :

liste = []
for i in range(4):
    liste.append(i)
print(liste)

Affirmation : Ce programme affiche la liste [0, 1, 2, 3].

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]Correct !
Le programme part d'une liste vide puis ajoute successivement chaque entier de range(4), c'est-à-dire $0$, $1$, $2$, $3$.
Il affiche bien [0, 1, 2, 3].[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
Attention au point de départ de range : il commence à $0$, pas à $1$, et s'arrête avant l'argument indiqué.
Énumère les valeurs parcourues par range(4), qui sont ajoutées une à une à la liste vide.[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. range(4) génère $0, 1, 2, 3$, qui sont ajoutés un à un à la liste vide. Le résultat est bien [0, 1, 2, 3].
[/solution]
[/etape]