Exo Construits

Identification

Infoforall

12 - Exo types construits


A rendre en version papier ou numérique.

1 - String

✎ 01° Soit la variable s suivante :

1
s = "N.S.I"
  1. Qu'est-ce qui montre que le type de s est un string (str en Python) ?
  2. Fournir l'appel de fonction native permettant de connaître le type de s depuis la console.
  3. Expliquer pourquoi la longueur de ce string est 5.
  4. Fournir l'appel de fonction native permettant de connaître la longueur de s depuis la console.

...CORRECTION...

  1. C'est la présence de GUILLEMETS autour du texte qui permet de comprendre qu'il s'agit d'un string.
  2. Voici comment obtenir le type :
  3. >>> type(s) <class 'str'>
  4. Le string comporte N, S, I et deux points. Soit 5 caractères
  5. Voici comment obtenir sa longueur :
  6. >>> len(s) 5

✎ 02° Toujours avec ce même string :

1
s = "N.S.I"

Associer chaque expression 1-2-3 ci-dessous à l'une des significations A-B-C proposées.

Expressions

  1. s
  2. i
  3. s[i]

Sémantique de l'expression

  1. L'indice d'une case du string
  2. Le string
  3. Le contenu de la case i du string

...CORRECTION...

  • s : le string
  • i : l'indice d'une case
  • s[i] : le contenu de la case i

✎ 03° Placer un commentaire à côté du chacune des lignes de ce programme pour expliquer ce qu'il réalise. Vous pouvez éventuellement le lancer pour vérifier ou comprendre ce qu'il fait.

1 2 3 4 5 6 7 8 9
def epeler(phrase): print("-- Début --") for i in range(len(phrase)): print(phrase[i]) print("-- Fin --") print("Tapez une phrase et validez avec ENTREE :") p = input() epeler(p)

...CORRECTION...

1 2 3 4 5 6 7 8 9
def epeler(phrase): # Déclaration de la fonction print("-- Début --") # Affiche un message initial for i in range(len(phrase)): # Pour chaque indice i possible dans phrase print(phrase[i]) # Affiche le caractère n°i print("-- Fin --") # Affiche un message final print("Tapez une phrase et validez avec ENTREE :") # Affiche un message explicatif p = input() # Récupère dans p la saisie-clavier de l'utilisateur epeler(p) # Appel à epeler() en envoyant p

✎ 04° On considère que l'utilisateur tape NSI lors du input(). On considérera donc qu'après exécution de la ligne 8, p fait référence à NSI".

  1. Sachant, qu'en ligne 9, on voit qu'on appelle epeler() en lui envoyant p, que va contenir phrase lors de cet appel ?
  2. Quelles seront les valeurs successives que prendra i lors de la boucle sur les lignes 3-4 ?
  3. Ecrire la séquence de lignes qui va s’exécuter lors du fonctionnement.
1 2 3 4 5 6 7 8 9
def epeler(phrase): print("-- Début --") for i in range(len(phrase)): print(phrase[i]) print("-- Fin --") print("Tapez une phrase et validez avec ENTREE :") p = input() epeler(p)

...CORRECTION...

  1. phrase reçoit p donc "NSI".
  2. len(phrase) renvoie 3. La variable de boucle i va donc prendre les valeurs 0, 1 et 2.
  3. Voici la succession de lignes :
  4. L1 (déclaration)

    L7-L8-L9(appel)-L1-L2

    L3(i=0)-L4

    L3(i=1)-L4

    L3(i=2)-L4

    L5-L9(retour)

    Fin

2 - Tableau statique

✎ 05° Soit la variable t suivante :

1
t = [10, 15, 12]
  1. Qu'est-ce qui montre que le type de t est un tableau (list en Python) ?
  2. Fournir l'appel de fonction native permettant de connaître le type de t depuis la console.
  3. Expliquer pourquoi la longueur de ce tableau est 3.
  4. Fournir l'appel de fonction native permettant de connaître la longueur de t depuis la console.

...CORRECTION...

  1. C'est la présence de CROCHETS qui permet de comprendre qu'il s'agit d'un string.
  2. Voici comment obtenir le type :
  3. >>> type(t) <class 'list'>
  4. Le tableau comporte 3 cases.
  5. Voici comment obtenir sa longueur :
  6. >>> len(t 3

✎ 06° Toujours avec ce même tableau :

1
t = [10, 15, 12]

Associer chaque expression 1-2-3 ci-dessous à l'une des significations A-B-C proposées.

Expressions

  1. t
  2. i
  3. t[i]

Sémantique de l'expression

  1. L'indice d'une case du tableau
  2. Le tableau
  3. Le contenu de la case i du tableau

...CORRECTION...

  • t : le tableau
  • i : l'indice d'une case
  • t[i] : le contenu de la case i du tableau t

✎ 07° Toujours avec ce même tableau :

1
t = [10, 15, 12]
  1. Evaluer l'expression t[0]
  2. Evaluer l'expression t[1]
  3. Evaluer l'expression t[2]

...CORRECTION...

  1. t[0] est évaluée à 10.
  2. t[1] est évaluée à 15.
  3. t[2] est évaluée à 12.

✎ 08° Quelles vont être les valeurs successives prises par i dans ce programme :

1 2 3 4
s = 0 t = [10, 15, 12] for i in range(len(t)): s = s + t[i]

...CORRECTION...

Puisque le tableau possède 3 cases, les valeurs possibles seront 0 puis 1 puis 2.

✎ 09° Poursuivre le déroulé d'exécution du programme précédent. Voici le début :

  • Ligne 1 : Affectation de s à 0.
  • Ligne 2 : Affectation de t
  • Ligne 3 (avec i=0)
  • Ligne 4 : Incrémentation de s de t[0] : s référence 10.
  • Ligne 3 (avec i=1)
  • Ligne 4 : Incrémentation de s de ... : s référence ...
  • ...

...CORRECTION...

  • Ligne 1 : Affectation de s à 0.
  • Ligne 2 : Affectation de t
  • Ligne 3 (avec i=0)
  • Ligne 4 : Incrémentation de s de t[0] : s référence 10.
  • Ligne 3(avec i=1)
  • Ligne 4 : Incrémentation de s de t[1] : s référence 25 (10+15)
  • Ligne 3(avec i=2)
  • Ligne 4 : Incrémentation de s de t[2] : s référence 37 (25+12)

✎ 10° Voici une fonction très mal nommée puisqu'on ne comprend pas ce qu'elle fait simplement en regardant son nom. Quel nom lui donneriez-vous pour rendre son utilité plus explicite ?

1 2 3 4 5
def inconnue(tableau): s = 0 for i in range(len(tableau)): s = s + tableau[i] return s

...CORRECTION...

Cette fonction doit visiblement recevoir un tableau en entrée.

Son fonctionnement est similaire à la question précédente : elle réalise la somme des valeurs contenus dans le tableau.

On pourrait donc nommer cette fonction somme() ou sommer() ou additionner()...

1 2 3 4 5
def somme(tableau): s = 0 for i in range(len(tableau)): s = s + tableau[i] return s

✎ 11° Les tableaux sont-ils MUABLES ou IMMUABLES en Python ?

Expliquer ce qui va se passer si on tape ces instructions :

>>> notes = [5, 13, 18, 7] >>> notes[1] = 15

...CORRECTION...

Le tableau était muable, on peut modifier le contenu d'une case (ici la case 1 QUI N'EST PAS LA PREMIERE) et remplacer son contenu.

On aurait alors ceci :

>>> notes = [5, 13, 18, 7] >>> notes[1] = 15 >>> notes [5, 15, 18, 7]

3 - N-uplet

✎ 13° Questions générales :

  • Quel est le caractère qui permet de déclarer des n-uplets en Python ?
  • Quel est le nom de ce type de donnée en Python ?
  • Ce type est-il MUABLE ou IMMUABLE en Python ?

...CORRECTION...

  • Il s'agit des parenthèses.
  • En Python, on parle de tuple.
  • Ce type est IMMUABLE : on ne peut pas changer le contenu des cases après création.

✎ 14° Comment extraire le prénom des informations d'un individu sachant que le prénom est sur l'indice 2.

>>> individu = ('policier', 'McClane', 'John', 4842) >>> ???

...CORRECTION...

>>> individu = ('policier', 'McClane', 'John', 4842) >>> individu[2] 'John'

4 - Dictionnaire

✎ 15° Questions générales :

  • Quel est le caractère qui permet de déclarer des dictionnaires en Python ?
  • Quel est le nom de ce type de donnée en Python ?
  • Ce type est-il MUABLE ou IMMUABLE en Python ?

...CORRECTION...

  • Il s'agit des accolades.
  • En Python, on parle de dict.
  • Ce type est MUABLE : on peut changer le contenu des cases après création.

✎ 16° Voici un dictionnaire où les clés sont des personnes identifiées par une lettre. La valeur associée est la personne suivante dans la chaîne.

>>> chaine = {'alice': 'charlie', 'bob': 'alice', 'charlie': 'bob'}

Questions

  1. En observant le dictionnaire, dire à qui Alice donnerait un message qu'elle reçoit ?
  2. Que doit-on taper dans la console pour que Python réponde à la question précédente sachant que la clé est la personne et la valeur la personne suivante ?

...CORRECTION...

  1. En cherchant à la main la clé 'alice', on voit que la valeur associée est 'charlie'. Alice va donc donner son message à Charlie.
  2. >>> chaine = {'alice': 'charlie', 'bob': 'alice', 'charlie': 'bob'}
  3. Que doit-on taper dans la console pour que Python réponde à la question précédente sachant que la clé est la personne et la valeur la personne suivante ?
  4. >>> chaine = {'alice': 'charlie', 'bob': 'alice', 'charlie': 'bob'} >>> chaine['alice'] 'charlie'

✎ 17° Quelles sont les évaluations successives qu'il faudrait taper dans la console pour parvenir à suivre le chemin d'un message partant d'alice jusqu'à ce que le message lui revienne dans cette chaîne ?

>>> chaine = {'alice': 'charlie', 'bob': 'alice', 'charlie': 'éléonore', 'dana':'', 'eléonore': 'farid', 'farid': 'alice'} >>> ???

...CORRECTION...

>>> chaine = {'alice': 'éléonore', 'bob': 'alice', 'charlie': 'farid', 'dana':'bob', 'eléonore': 'charlie', 'farid': 'alice'} >>> chaine['alice'] 'éléonore' >>> chaine['éléonore'] 'charlie' >>> chaine['charlie'] 'farid' >>> chaine['farid'] 'alice'

La chaîne est donc alice -> éléonore -> charlie -> farid -> alice

FIN

Activité publiée le 04 10 2023
Dernière modification : 04 10 2023
Auteur : ows. h.